<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
  <head>
    <meta name="generator" content=
  "HTML Tidy for Linux (vers 1 September 2005), see www.w3.org">
      <meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
        <meta http-equiv="Content-Style-Type" content="text/css">
            <link rel="STYLESHEET" href="MakeProjectCreator.css" charset="ISO-8859-1"
            type="text/css">

              <title>MPC</title>
            </head>

  <body bgcolor="#FFFFFF">
    <div>
      <h2 class="ChapterNum">&nbsp;</h2>
    </div>

    <div>
      <h1 class="Head1">The Makefile, Project, and Workspace Creator (MPC)</h1>

      <div>
        <h3 class="Head2">Introduction</h3>
        <hr>

          <p class="Body">
            Maintaining multiple build tool files for a
            multi-platform project can be quite a challenge, especially when the
            project structure and platforms are constantly changing and evolving.
            A project may support Makefiles, Visual C++ project files, Borland
            Makefiles, and many others. Adding files, deleting files, changing
            project options or even changing the name of the target within your
            project will require you to expend time updating each build tool
            file. What you need instead is a single location to store project
            specific information to avoid repetitious, tedious modifications to
            multiple build tool files. This is where Makefile Project Creator
            (MPC) comes into the picture.
          </p>

          <p class="Body">
            MPC can be used to generate build tool specific
            project files from a generic mpc file. The MPC project file is a
            collection of source files that make up a single build target. MPC
            uses platform specific input along with mpc files and generates build
            tool specific files like makefiles, Visual C++ workspace and project
            files, Visual Studio solution and project files, etc.
          </p>

          <p class="Body">
            MPC provides many advantages over the build tool
            files it replaces. It provides mechanisms for minimizing maintenance
            of project build files. It does this through support for project
            inheritance and defaults for all aspects of a project, and the syntax
            is simple and easy to use and maintain. These and other features will
            be discussed in detail in the following sections. The structure and
            syntax of the MPC files are described in the
            <a href="#Writing_MPC_Files">Writing MPC and MWC Files</a> section.
            In addition, a complete example of the use of MPC is shown in the <a href=
        "MakeProjectCreator.html#ExampleMPCFile" class="XRef">
              Example MPC
              File
            </a> section.
          </p>
        </div>

      <div>
        <h3 class="Head2">Using MPC</h3>
        <hr>

          <p class="Body">
            An MPC project is a set of parameters that describe
            an individual build target (such as a library or executable). These
            parameters include the target name, include paths, source files,
            header files, etc. One or more projects can be defined within a
            single mpc file. An MPC workspace is just an arbitrary collection of
            projects.
          </p>

          <p class="Body">
            Projects can be generated (without workspaces) by
            using the mpc.pl script. Multiple mpc files can be passed to this
            script. If no mpc files are passed to the script, it will search for
            project-related files (such as source files, header files, etc.) and
            incorporate them into a default project.
          </p>

          <p class="Body">
            <a name="Figure_1-2"></a>This diagram shows a
            high-level view of project file generation using mpc.pl.
          </p>

          <p class="Body">
            <h6 class="FigTitle">Generating projects with mpc.pl</h6>

            <table border="1" summary="Generating projects with mpc.pl">
              <tr>
                <td rowspan="1" colspan="1">
                  <p class="Tbl-Body">&nbsp;</p>

                  <div>
                    <img src="images/mpc.gif" alt=
                  "Generating projects with mpc.pl">
                    </div>
                </td>
              </tr>
            </table>
          </p>

          <p class="Body">
            To generate workspaces, you must run <em class=
        "Code">mwc.pl</em>. This script will generate projects from mpc files
            and create a workspace based on those mpc files. If no mwc files are
            passed to the script, it will search in the current directory and its
            subdirectories for all mpc files and incorporate them into a single
            workspace.
          </p>

          <p class="Body">
            For make based project types (make, gnuace, bmake,
            nmake), a workspace is just a top-level makefile. But, for graphical
            interfaces such as Visual Studio, a workspace is the top-level file
            that groups all of the project files together.
          </p>

          <p class="Body">
            The following diagram shows a high-level view of
            workspace file generation using mwc.pl.
          </p>

          <h6 class="FigTitle">Generating workspaces with mwc.pl</h6>

          <p class="Body">
            <table border="1" summary="Generating workspaces with mwc.pl">
              <tr>
                <td rowspan="1" colspan="1">
                  <p class="Tbl-Body">&nbsp;</p>

                  <div>
                    <img src="images/mwc.gif" alt=
                  "Generating workspaces with mwc.pl">
                    </div>
                </td>
              </tr>
            </table>
          </p>



          <div>
            <h4 class="Head3">Supported Build Tools</h4>


            <p class="BodyNoLead">
              MPC generates workspaces and projects for use with
              many build tools. This table lists the MPC types (used with
              mpc&rsquo;s <em class="Code">-type</em> option) and their
              associated build tools.
            </p>


            <h6 class="NumberedTableTitle">MPC Types</h6>

            <p class="Body">
              <table border="1" summary="MPC Types">
                <tr>
                  <th rowspan="1" colspan="1">
                    <p class="Tbl-Heading">Type</p>
                  </th>

                  <th rowspan="1" colspan="1">
                    <p class="Tbl-Heading">Build Tool</p>
                  </th>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">automake</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">GNU Automake.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">bcb2007</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Borland C++ Builder 2007.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">bcb2009</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">CodeGear C++ Builder 2009.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">bds4</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Support for Borland Developer Studio 4
                      is incomplete.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">bmake</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Borland Make.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">cc</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Code Composer Studio 2.0</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">
                        <a href="CDT6.html">cdt6</a>
                      </em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Eclipse CDT 6 (for Eclipse "Galileo" 3.5)
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">
                        <a href="CDT6.html">
                          <!--CDT6.html describes cdt7 as well
                                            -->cdt7
                        </a>
                      </em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Eclipse CDT 7 (for Eclipse "Helios" 3.6)
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">em3</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">eMbedded Visual C++ 3.00 and 4.00.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">ghs</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Green Hills C++ Builder.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">gnuace</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      GNU Make for ACE/TAO/CIAO only
                      (ACE/TAO/CIAO extension).
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">html</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      html pages are generated for
                      visualization of project information.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">make</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Generic make. The makefiles generated
                      by this project type can be used with any version of make.
                      However, due to configuration issues, it should not be used
                      with ACE or TAO.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">nmake</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Microsoft NMake.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">
                        <a href="RpmSpec.html">rpmspec</a>
                      </em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">RPM packaging .spec files.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">sle</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Support for Visual SlickEdit is
                      incomplete.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vc6</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual C++ 6.0.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vc7</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio .NET 2002.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vc71</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio .NET 2003.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vc8</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio 2005.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vc9</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio 2008.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vc10</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio 2010.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vc11</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio 2012.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vc12</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio 2013.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vc14</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio 2015.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vs2017</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio 2017.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vs2019</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio 2019.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">vs2022</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Visual Studio 2022.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">
                        <a href="WB26.html">
                          wb26
                        </a>
                      </em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Wind River Workbench 2.6.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="TblCode">
                      <em class="TableCode">
                        <a href="WB30.html">
                          wb30
                        </a>
                      </em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Wind River Workbench 3.0.</p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">wix</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">Wix toolset for .msi creation.</p>
                  </td>
                </tr>
              </table>
            </p>


          </div>

          <div>
            <h4 class="Head3">Command Line</h4>

            <p class="BodyNoLead">
              The command line options for the workspace
              creator (<em class="Code">mwc.pl</em>) and the project creator
              (<em class="Code">mpc.pl</em>) are exactly the same. The project
              creator is used to generate one or more separate projects by
              passing mpc files to it on the command line. The workspace creator
              is used to generate one or more workspaces and the projects related
              to those workspaces.
            </p>

            <p class="Body">
              The table below describes each option with the
              more commonly used options in bold and project specific options in
              italics.
            </p>

            <p class="Body">
              <h6 class="NumberedTableTitle">
                <a name=
            "Command%20Line%20Options"></a>Command Line Options
              </h6>
            </p>
            <p class="Body">
              <table border="1" summary="Command Line Options">
                <tr>
                  <th rowspan="1" colspan="1">
                    <p class="Tbl-Heading">Option</p>
                  </th>

                  <th rowspan="1" colspan="1">
                    <p class="Tbl-Heading">Description</p>
                  </th>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-base</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option allows the user to force
                      every project to inherit from a specified <a href="#Base_Project">base project</a>. This
                      option can be used multiple times to force multiple
                      inheritance upon a project.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-complete</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This hidden option can be used to
                      generate a tcsh <em class="TableCode">complete</em> command
                      that allows a user of the tcsh shell to complete on options
                      as well as file names.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-exclude</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      If this option is used with <em class=
                  "Code">mwc.pl</em> , the directories or mwc files provided
                      in a comma separated list will be excluded when searching
                      for mpc files. Each element provided for exclusion should
                      be relative to the starting directory. This option has no
                      effect when used with <em class="Code">mpc.pl</em>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-expand_vars</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option instructs MPC to perform
                      direct replacement of $() variables with the values from
                      the environment (if the <em class="Code">-use_env</em>
                      option is used) or the values specified by the <em class=
                  "Code">-relative</em> option.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-feature_file</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option allows the user to override
                      the default feature file (<em class="Code">MPC/config/</em>
                      <em class="Code">default.features</em> or <em class=
                  "Code">ACE_wrappers/bin/MakeProjectCreator/config/default.features</em>
                      ) which may or may not exist. This file can be used to
                      override feature values specified in the <em class=
                  "Code">global.features</em> file located in the <em class=
                  "Code">config</em> directory. Feature files are described
                      in the <a href="MakeProjectCreator.html#TheFeatureFile"
 class="XRef">Feature File</a> section.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-features</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Specifies the feature list to set
                      before processing. This is a comma separated list and
                      should contain no spaces. The -features option can be
                      used multiple times on the same command line, the
                      effect is the same as if the parameters had been
                      specified with a single -features options, with the
                      parameters joined by commas.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-for_eclipse</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Allows generated makefiles to be used
                      with Eclipse.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-gendot</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      A .dot file, for use with Graphviz,
                      will be created for each workspace processed.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-genins</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option instructs MPC to generate
                      an &ldquo;install&rdquo; file after processing each
                      project. These &ldquo;install&rdquo; files can be used with
                      the prj_install.pl script which will copy portions of the
                      project related files into a user specified location.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-gfeature_file</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Specifies the global feature file. The
                      default global feature file is <em class=
                  "Code">global.features</em> found in the <em class=
                  "Code">config</em> directory.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-global</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option specifies the global input
                      file. Values stored within this <a href="#Base_Project">base project</a> are applied to
                      all generated projects. The default value is <em class=
                  "Code">
                        ACE_wrappers/bin/MakeProjectCreator/global.mpb or
                        MPC/config/global.mpb
                      </em>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-hierarchy</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      If this option is used with <em class=
                  "Code">mwc.pl</em> , it will generate a workspace at each
                      directory between the directory in which it is run and the
                      location of a processed mpc file. This option has no effect
                      when used with <em class="Code">mpc.pl</em> and is the
                      default for &ldquo;make&rdquo; based workspace types.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="Bold">
                        <em class=
                  "TableCode">-include</em>
                      </em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Include search directories are added
                      with this option. These search directories are used when
                      locating base projects, template input files and templates.
                      It can be used multiple times on the same command line.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-into</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option specifies that all
                      generated project files will be placed in a mirrored
                      directory structure. If any project within the
                      workspace is referenced via a full path, use of this
                      option is likely to cause problems.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-language</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option is used to specify which
                      language to assume when generating projects. The default
                      language is <em class="Code">cplusplus</em>, but <em class=
                  "Code">csharp</em>, <em class="Code">java</em> and
                      <em class="Code">vb</em> are also supported.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-make_coexistence</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Make based project types that normally
                      name the workspace <em class="Code">Makefile</em>
                      (<em class="Code">bmake</em> or <em class="Code">nmake</em>
                      ) will name the generated output files such that they can
                      coexist within the same directory. In essence, the
                      <em class="Code">bmake</em> and <em class="Code">nmake</em>
                      workspace names will not be <em class="Code">Makefile</em>,
                      but the name of the workspace followed by the project type
                      (<em class="Code">.bmake</em> or <em class=
                  "Code">.nmake</em> ).
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-name_modifier</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option allows the user to modify
                      the output names of projects and workspaces. These are
                      usually determined by either the mpc or mwc file, but can
                      be modified using a pattern replacement. The parameter
                      passed to this option will be used as the pattern and any
                      asterisks (*) found in the pattern will be replaced with
                      the project or workspace name depending on which type of
                      file is being created.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-apply_project</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option is only useful with the
                      <em class="Code">-name_modifier</em> option. When used in
                      conjunction with <em class="Code">-name_modifier</em>, the
                      pattern will be applied to the project name in addition to
                      the project or workspace name.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-nocomments</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Comments will not be placed in the
                      generated workspace files.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-noreldefs</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option specifies that the default
                      relative definitions should not be generated. See the
                      <em class="TableCode">-relative</em> option below.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-notoplevel</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option tells <em class=
                  "TableCode">mwc.pl</em> to generate all workspace related
                      project files, but do not generate the associated
                      workspace. This option tells <em class=
                  "TableCode">mpc.pl</em> to process all mpc files passed in,
                      but it will not generate any project files.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-recurse</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Search from the current directory for
                      any input files and process them from the directory in
                      which they are located.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="Bold">
                        <em class=
                  "TableCode">-relative</em>
                      </em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Relative paths are used to replace
                      variables enclosed with <em class="TableCode">$()</em>. By
                      default, any environment variable that ends in <em class=
                  "TableCode">_ROOT</em> will be automatically used as a
                      relative path replacement. For more information see
                      <a href="MakeProjectCreator.html#Additional-relative_information"
                      class="XRef">the -relative Option</a>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-relative_file</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option allows you to override the
                      default relative definitions file, which is default.rel
                      under the MPC config directory.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-static</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Specifies that static project files
                      will be generated from the MPC projects. The default is to
                      generate dynamic project files.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-template</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option allows a user to specify an
                      alternate template. Each project type has its own template
                      and this option allows a user to override the default
                      template.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-ti</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Each project type has a set of template
                      input files. With this option the default template input
                      file can be overridden for a particular project type. For
                      more information see <a href=
                  "MakeProjectCreator.html#Additional-ti_information"
 class="XRef">the -ti Option</a>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="Bold">
                        <em class=
                  "TableCode">-type</em>
                      </em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option specifies the type of
                      project or workspace to be generated. It can be specified
                      multiple times to generate different project types for a
                      single set of input files.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-use_env</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option instructs MPC to replace
                      all <em class="TableCode">$()</em> instances with the
                      corresponding environment variable value instead of using
                      values provided by the -relative option.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-value_project</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Use this option to override an mpc
                      project assignment from the command line. This can be used
                      to introduce new name value pairs to a project. However, it
                      must be a valid project assignment. For more information
                      see <a href=
                  "MakeProjectCreator.html#Additional-value_project_information"
      class="XRef">the -value_project Option</a>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">-value_template</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This option can be used to override
                      existing template input variable values from the command
                      line. It can not be used to introduce new template input
                      name value pairs. For more information see <a href=
                  "MakeProjectCreator.html#Additional-value_template_information"
                  class="XRef">the -value_template Option</a>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-workers</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Specifies number of child processes to
                      use to generate projects. For more information see <a href=
                  "MakeProjectCreator.html#Additional-workers_information"
                  class="XRef">the -workers Option</a>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-workers_dir</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      The directory for storing temporary
                      output files from the child processes. The default is
                      '/tmp/mpc' on Unix systems and %TEMP% on Windows. If
                      neither -workers_dir nor -workers_port is used,
                      -workers_dir is assumed. For more information see <a href=
                  "MakeProjectCreator.html#Additional-workers_dir_information"
                  class="XRef">the -workers_dir Option</a>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-workers_port</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      The port number for the parent listener.
                      If neither -workers_dir nor -workers_port is used,
                      -workers_dir is assumed. For more information see <a href=
                  "MakeProjectCreator.html#Additional-workers_port_information"
                  class="XRef">the -workers_port Option</a>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">-version</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      The MPC version is printed and no files
                      are processed.
                    </p>
                  </td>
                </tr>
              </table>
            </p>


            <div>
              <h5 class="Head4">Additional Option Descriptions</h5>


              <p class="BodyNoLead">
                Some of the options in <a href=
            "MakeProjectCreator.html#Command%20Line%20Options" class=
            "XRef">Command Line Options</a> require an expanded explanation.
                You will find more information on the <em class=
            "Code">-relative</em>, <em class="Code">-ti</em>, <em class=
            "Code">-value_project</em>, <em class=
            "Code">-value_template</em>, <em class=
            "Code">-workers</em>, <em class=
            "Code">-workers_dir</em> and <em class=
            "Code">-workers_port</em> options below.
              </p>


              <div>
                <h6 class="Head5">
                  <a name=
            "Additional-relative_information"></a>The -relative Option.
                </h6>


                <p class="BodyNoLead">
                  Some project types do not (completely)
                  support the idea of accessing environment variables through the
                  use of <em class="Code">$()</em>, and therefore MPC must ensure
                  that generated projects are usable in these cases. In order to
                  avoid the existence of <em class="Code">$()</em> variables
                  within the generated project files, relative paths are put in
                  place of those (where possible).
                </p>

                <p class="Body">
                  The <em class="Code">-relative</em> option
                  takes a single parameter of a name value pair, for
                  example:
                </p>

                <blockquote>


                  <p class="Code">
                    mwc.pl -relative
                    PROJ_TOP=/usr/projects/top
                  </p>


                </blockquote>

                <p class="Body">
                  In above example, if the text <em class=
              "Code">"$(PROJ_TOP)</em> " is found as a value for any mpb,
                  mpc, mpd, or mpt variable then it is replaced by a path that is
                  relative to <em class="Code">/usr/projects/top</em>. For
                  example, if an mpc file located under <em class=
              "Code">/usr/projects/top/dir</em> contained the following:
                </p>

                <blockquote>



                  <p class="Code">project {</p>

                  <p class="Code">&nbsp;&nbsp;includes += $(PROJ_TOP)</p>

                  <p class="Code">}</p>


                </blockquote>

                <p class="Body">
                  The generated project file would contain text
                  similar to:
                </p>

                <blockquote>
                  <p class="Code">CPPFLAGS += -I..</p>
                </blockquote>

                <p class="Body">
                  The <em class="Code">$(PROJ_TOP)</em> string
                  was replaced with a directory value that is relative to the
                  directory in which the mpc file is located.</li>

                </div>

              <div>
                <a name="Additional-ti_information"></a>

                <h6 class="Head5">The -ti Option.</h6>


                <p class="BodyNoLead">
                  The <em class="Code">-ti</em> option
                  allows you to identify different template input files based on
                  the type of target being built. Template input files correspond
                  to four different categories: <em class="Code">dll</em>,
                  <em class="Code">lib</em>, <em class="Code">dll_exe</em>, and
                  <em class="Code">lib_exe</em>. Not all project types
                  distinguish between the different categories, but the templates
                  for various project types will be combined with different
                  template input files, depending on the build target type, to
                  generate different output.
                </p>

                <p class="Body">
                  To override the default template input file
                  names, a <em class="Code">-ti</em> option is provided. The
                  <em class="Code">-ti</em> option takes a single parameter of
                  the form <em class="Code">type:file</em>. The <em class=
              "Code">type</em> is one of the four categories stated above and
                  the <em class="Code">file</em> is the base name of an mpt file
                  located somewhere in the include search paths.
                </p>

                <p class="Body">
                  The following example shows a usage of the -ti
                  option. It says that when generating a static project (lib),
                  use the <em class="Code">vc7lib</em> template input file and
                  when generating a dynamic project (dll), use the <em class=
              "Code">vc7dll</em> template input file:
                </p>

                <blockquote>
                  <p class="Code">
                    mpc.pl -type vc71 -ti lib:vc7dsplib -ti
                    dll:vc7dspdll
                  </p>

                </blockquote>

                <p class="Body">
                  These happen to be the default values for the
                  <em class="Code">vc71</em> type, but it illustrates that a
                  different template input can be specified for each
                  category.
                </p>

              </div>

              <div>
                <a name="Additional-value_project_information"></a>

                <h6 class="Head5">The -value_project Option.</h6>

                <p class="BodyNoLead">
                  The <em class="Code">-value_project</em>
                  option can be useful when the need arises to modify the value
                  of an MPC variable across one or more mpc files. For example,
                  if you wanted to generate all of your projects with an
                  additional include search path you would run the following
                  command:
                </p>

                <blockquote>

                  <p class="Code">
                    mwc.pl -value_project
                    includes+=/include/path
                  </p>

                </blockquote>

                <p class="Body">
                  In the above example, an additional include
                  search path of <em class="Code">/include/path</em> would be
                  placed in all generated projects.
                </p>

              </div>

              <div>
                <a name="Additional-value_template_information"></a>

                <h6 class="Head5">The -value_template Option.</h6>

                <p class="BodyNoLead">
                  This option modifies existing or adds
                  new template input name/value pairs. For example, if you wanted
                  to generate dynamic <em class="Code">vc71</em> projects with
                  only <em class="Code">Release</em> targets, you would run the
                  following command:
                </p>

                <blockquote>

                  <p class="Code">
                    mwc.pl -type vc71 -value_template
                    configurations=Release
                  </p>

                </blockquote>

                <p class="Body">
                  To find out what template input variables are
                  defined, see the individual mpd file of interest (<em class=
              "Code">$ACE_ROOT/bin/MakeProjectCreator/templates/*.mpd</em>
                  and <em class="Code">$MPC_ROOT/templates/*.mpd</em> ) and
                  search for names used within <em class="Code">&lt;%</em> and
                  <em class="Code">%&gt;</em> or use the <em class=
              "Code">document_template.pl</em> script described in the
                  <a href="#Document_Template_Script">
                    Template Variable
                    Documentation
                  </a> section. Names that are not listed as project
                  keywords (see <a href="MakeProjectCreator.html#82186" class=
              "XRef">Assignment Keywords</a>) are template variables.
                </p>

              </div>

              <div>
                <a name="Additional-workers_information"></a>

                <h6 class="Head5">The -workers Option.</h6>

                <p class="BodyNoLead">
                  This option specifies the number of
                  child process to use to generate projects. Using multiple
                  workers can decrease project generation time significantly
                  on multiprocessor systems. For example, if you wanted to
                  distribute projects among four worker processes, you
                  would run the following command:
                </p>

                <blockquote>

                  <p class="Code">mwc.pl -type gnuace -workers 4</p>

                </blockquote>

                <p class="Body">
                  In multi-process MPC, each child has
                  to pass intermediate project info back to the parent. This
                  is done using temporary files or using a socket. The temp
                  file implementation, <a href=
"MakeProjectCreator.html#Additional-workers_dir_information"
class="XRef">the -workers_dir option</a>,
                  forks a new child for each project and ensures there are
                  never more children running than requested. The socket
                  listener implementation, <a href=
"MakeProjectCreator.html#Additional-workers_port_information"
class="XRef">the -workers_port option</a>,
                  pre-forks N children and distributes jobs to them.
                </p>

              </div>

              <div>
                <a name="Additional-workers_dir_information"></a>

                <h6 class="Head5">The -workers_dir Option.</h6>


                <p class="Body">
                  This option specifies the directory for
                  storing temporary output files from the child processes.
                  The default is '/tmp/mpc' on Unix-like systems and %TEMP%
                  on Windows. If neither <em class="Code">-workers_dir</em>
                  nor <em class="Code">-workers_port</em> is
                  used, <em class="Code">-workers_dir</em> is assumed. For
                  example, if you wanted to use 4 workers and '/tmp/mydir' for
                  temporary filess, you would run the following command:
                </p>

                <blockquote>


                  <p class="Code">mwc.pl -type gnuace -workers 4 -workers_dir /tmp/mydir</p>


                </blockquote>

              </div>

              <div>
                <a name="Additional-workers_port_information"></a>

                <h6 class="Head5">The -workers_port Option.</h6>


                <p class="BodyNoLead">
                  This option specifies the port number
                  where the parent listens for project information from the
                  children. If you wanted to receive information from 2 workers
                  on port 9876, you would run the following command:
                </p>

                <blockquote>


                  <p class="Code">mwc.pl -type gnuace -workers 2 -workers_port 9876</p>

                </blockquote>


              </div>
            </div>
          </div>

          <div>
            <h4 class="Head3">Configuration Files</h4>



            <h6 class="Head5">Codebase Configuration File (base.cfg)</h6>


            <p class="BodyNoLead">
              This configuration file can be used to
              specify alternate locations for the MPC Configuration File
              (discussed below). If a <em class="Code">base.cfg</em> is found
              underneath the <em class="Code">config</em> directory in the MPC
              root directory, it will be read to determine the location of
              MPC.cfg based on the directory in which MPC was started.
            </p>


            <p class="Body">
              The <em class="Code">base.cfg</em> file allows you to specify which MPC.cfg
              file to use with the syntax: &lt;execution_path_root&gt = &lt;mpc_config_path&gt;.
              &nbsp;For a base.cfg file containing the following:
            </p>

            <blockquote>

              <p class="Code">/foo/bar_root = /foo/bar_root/MPC/config</p>

            </blockquote>

            <p class ="Body">
              Meaning that when $MPC_ROOT/mwc.pl is run in a directory below <em class="Code">/foo/bar_root</em>, it will
              search for <em class="Code">MPC.cfg</em> in the directory <em class="Code">/foo/bar_root/MPC/config</em>.
            </p>
            <p class="Body">
              For example, if <em class=
          "Code">$MPC_ROOT/mwc.pl</em> is run under <em class=
          "Code">
                <strong>/foo/bar_root/</strong>src
              </em>, MPC would attempt to open and read <em class=
          "Code">
                <strong>/foo/bar_root/MPC/config/</strong>MPC.cfg
              </em> as the MPC
              Configuration File. If the base configuration file is not present,
              MPC will try to use <em class="Code">$MPC_ROOT/config/MPC.cfg</em>
              as the MPC Configuration File.
            </p>

            <p class="Body">
              You may reference environment variables, accessed
              via the dollar sign (e.g., <em class="Code">$NAME</em>), on either
              side of the equals sign. In either this file or the MPC
              Configuration File (see below), an alternate form of environment
              variable reference may be used for variables which are not expected
              to be defined in all scenarios.  These variables use the syntax
              <em class="Code">$?NAME</em> instead of <em class="Code">$NAME</em>.
              With this syntax, if the environment variable
              <em class="Code">NAME</em> is not defined, no error or warning is
              printed by MPC, and the substring starting with
              <em class="Code">$?NAME</em> until the next whitespace is expanded
              to the empty string.
            </p>




            <h6 class="Head5">MPC Configuration File</h6>


            <p class="BodyNoLead">
              In an effort to move away from the use of
              environment variables, a configuration file has been introduced.
              The configuration file (<em class="Code">MPC.cfg</em>) can contain
              settings to provide command line options, control logging and
              direct MPC to dynamic project types.
            </p>

            <p class="Body">
              The following keywords are allowed in the
              configuration file.
            </p>

            <p class="Body">
              <table border="1" summary="Configuration File Keywords">
                <tr>
                  <th rowspan="1" colspan="1">
                    <p class="Tbl-Heading">Keyword</p>
                  </th>

                  <th rowspan="1" colspan="1">
                    <p class="Tbl-Heading">Description</p>
                  </th>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">command_line</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Provide additional command line options
                      to MPC. The value of this setting will be prepended to the
                      options passed to <em class="Code">mwc.pl</em> or
                      <em class="Code">mpc.pl</em>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">default_type</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Provide a single project type (as
                      specified by the <em class="Code">-type</em> option) as the
                      default project type.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">dynamic_types</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      This comma separated list points to
                      directories in which MPC will search for Perl modules to
                      implement additional MPC project types, base projects or
                      template files. This setting can be used to augment or
                      replace functionality in MPC. For each suitable directory
                      found, it will add a <em class="Code">modules</em> include
                      path for Perl to find modules, add a <em class=
                  "Code">config</em> include path to locate base projects and
                      a <em class="Code">template</em> include path to find MPC
                      templates.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">includes</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Similar to the <em class=
                  "Code">-include</em> command line option, it adds the list
                      of comma separated paths to the MPC include search
                      paths.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class="TableCode">logging</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      If this setting contains <em class=
                  "Code">info=1</em>, informational messages will be printed.
                      If it contains <em class="Code">warn=1</em>, warning
                      messages will be printed. If it contains <em class=
                  "Code">diag=1</em>, diagnostic messages will be printed. If
                      it contains <em class="Code">debug=1</em>, debug message
                      will be printed. And lastly, if it contains <em class=
                  "Code">detail=1</em>, detail messages will be printed. If
                      it contains none of these, MPC will not print out any
                      information or warnings when processing projects or
                      workspaces. Errors are always printed if any are
                      encountered. The default value is <em class="Code">
                        warn=1,
                        diag=1, detail=1
                      </em>.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">main_functions</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      Provide additional main functions to be
                      recognized in conjunction with automatic executable project
                      recognition. The value assigned should be of the form
                      <em class="Code">
                        &lt;language&gt;:&lt;func name&gt;[,
                        &lt;language&gt;:&lt;func name&gt;]*
                      </em>. A function can
                      be specified for all languages by only providing the
                      function name.
                    </p>
                  </td>
                </tr>

                <tr>
                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      <em class=
                  "TableCode">verbose_ordering</em>
                    </p>
                  </td>

                  <td rowspan="1" colspan="1">
                    <p class="Tbl-Body">
                      If this is set, mwc.pl will warn the
                      user about references to projects in the <em class=
                  "Code">after</em> keyword that have not been processed.
                    </p>
                  </td>
                </tr>
              </table>
            </p>

          </div>

          <div>
            <h4 class="Head3">Environment Variables</h4>


            <p class="BodyNoLead">
              MPC recognizes a few environment variables
              that alter the way it performs certain tasks. The sections below
              describe each one and the effect it has on MPC.
            </p>

            <p class="Body">
              The <em class=
          "Code">MPC_DEPENDENCY_COMBINED_STATIC_LIBRARY</em> environment
              variable only affects the way workspace dependencies are created
              for <em class="Emphasis">static</em> projects with the <em class=
          "Code">em3</em>, <em class="Code">vc6</em>, <em class=
          "Code">vc7</em>, <em class="Code">vc71</em>, <em class="Code">vc8</em>,
          <em class="Code">vc9</em>, <em class="Code">vc10</em>, <em class="Code">vc11</em>,
              <em class="Code">vc12</em>, <em class="Code">vc14</em>,
              and <em class="Code">vs*</em> project types. If this environment
              variable is set, MPC will generate inter-project dependencies for
              libraries within a single workspace. This is usually not desired
              since adding these dependencies in a static workspace has the side
              effect of including dependent libraries into the dependent
              library.
            </p>

            <p class="Body">
              The <em class="Code">MPC_GHS_UNIX</em> environment
              variable is only meaningful when generating the ghs project files.
              By default, the ghs type assumes that it is for Windows. Set this
              environment variable prior to running MPC if this is not the
              case.
            </p>

            <p class="Body">
              The <em class="Code">MPC_USE_WIN_COMMANDS</em>
              environment variable causes the Windows related pseudo template
              variables to be used regardless of the type of project being
              generated.
            </p>

          </div>
        </div>

      <div>
        <a name="Writing_MPC_Files"></a>
        <h3 class="Head2">Writing MPC and MWC Files</h3>
        <hr>


          <p class="Body">
            You may want to familiarize yourself with the
            various input files for MPC. The input file types and the syntax of
            each are discussed in the sections below.
          </p>


          <div>
            <h4 class="Head3">Input Files</h4>

            <p class="BodyNoLead">
              There are four different input files
              associated with MPC. For most users of MPC, the main files of
              concern are mpc and mwc files.
            </p>


            <div>
              <h5 class="Head4">Project Files (mpc)</h5>

              <p class="Body">
                Project files, those with the <em class=
            "Code">mpc</em> extension, contain such things as include paths,
                library paths, source files and inter-project dependencies. An
                mpc file can contain one or more &ldquo;projects&rdquo; each of
                which needs to be uniquely named to avoid project generation
                errors. Projects represent build targets such as libraries and
                executables.
              </p>

            </div>

            <div>
              <h5 class="Head4">Workspace Files (mwc)</h5>


              <p class="Body">
                Workspaces are defined by providing a list
                of mpc files, directories or other mwc files in a single mwc
                file. For each mpc file, the Workspace Creator calls upon the
                Project Creator to generate the project. After all of the
                projects are successfully generated, the tool-specific workspace
                is generated containing the projects and any defined
                inter-project dependency information (if supported by the build
                tool). An mwc file can contain one or more
                &ldquo;workspaces,&rdquo; each of which needs to be uniquely
                named. If no workspace files are provided to the workspace
                creator, the current directory is traversed and any mpc files
                located will be part of the workspace that is generated.
              </p>

            </div>

            <div>

              <h5 class="Head4">Base Project Files (mpb)</h5>


              <p class="Body">
                One of the many unique and useful features
                of MPC is that the project definition files can use inheritance.
                Project inheritance allows a user to set up a base project (mpb
                file) that can contain information that is applicable to all
                derived projects. Common project attributes, such as include
                paths, library paths, and inter-project dependencies, could be
                described in this base project and any project that inherits from
                it would contain this information as well.
              </p>

            </div>

            <div>
              <h5 class="Head4">Base Workspace Files (mwb)</h5>


              <p class="Body">
                As with projects, workspaces can also
                inherit from other workspaces. A base workspace can provide
                workspace information that may be common to other
                workspaces.
              </p>

            </div>
          </div>

          <div>
            <h4 class="Head3">General Input File Syntax</h4>


            <p class="BodyNoLead">
              In this section we discuss the syntax of the
              various files. We also describe some of the default values that go
              along with these files.
            </p>


            <div>
              <h5 class="Head4">mwc and mwb files</h5>


              <p class="Body">
                Workspaces can contain individual mpc
                files or directories. There can be one or more workspaces defined
                within a single mwc file.
              </p>

              <blockquote>


                <p class="Code">
                  workspace(optional name):
                  optional_base_workspace {
                </p>

                <p class="Code">&nbsp;&nbsp;file.mpc</p>

                <p class="Code">&nbsp;&nbsp;directory</p>

                <p class="Code">&nbsp;&nbsp;other.mwc</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">
                  &nbsp;&nbsp;exclude(vc6, vc7, vc71, vc8, vc9,
                  vc10, vc11, vc12, vc14, vs2017, vs2019, vs2022, nmake) {
                </p>

                <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;this_directory</p>

                <p class="Code">&nbsp;&nbsp;}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&nbsp;&nbsp;exclude(prop:microsoft) {</p>

                <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;non_microsoft</p>

                <p class="Code">&nbsp;&nbsp;}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&nbsp;&nbsp;specific(rpmspec) {</p>

                <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;rpm_version = 1.0</p>

                <p class="Code">&nbsp;&nbsp;}</p>

                <p class="Code">}</p>


              </blockquote>

              <p class="BodyNoLead">
                A workspace can be given a name. This is
                the value given in the parentheses after the keyword <em class=
            "Code">workspace</em>. If the workspace is not given a name, the
                workspace name is taken from the name of the mwc file without the
                extension.
              </p>

              <p class="Body">
                Workspaces can also inherit from other
                workspaces. In the above example, <em class=
            "Code">optional_base_workspace</em> would be the base name of an
                mwb file with no extension that contains workspace information.
                This information would then be included in each workspace that
                inherits from it.
              </p>

              <p class="Body">
                The lines between the curly braces
                contain assignments, mpc files, directories, other
                workspace files or exclusion sections.  For each listed item,
                <ul>
                  <li>an mpc file will be included in the workspace,</li>

                  <li>
                    a directory recursively traversed and any mpc files
                    found will be included,
                  </li>
                  <li>
                    <a name="AggregatedWorkspace"></a>a workspace file will be aggregated into the main workspace.
                  </li>
                </ul>

                <p class="Body">
                  A workspace can have assignments interspersed
                  within the directories and mpc files. These assignments modify
                  the way projects are generated.
                </p>

                <p class="Body">
                  The <em class="Code">cmdline</em> setting can be
                  used to provide command line options that would normally be
                  passed to <em class="Code">mwc.pl</em> (see <a href=
            "MakeProjectCreator.html#Command%20Line%20Options" class=
            "XRef">Command Line Options</a>). However, the <em class=
            "Code">-exclude</em>, <em class="Code">-for_eclipse</em>,
                  <em class="Code">-gendot</em>, <em class="Code">-gfeature_file</em>,
                  <em class="Code">-into</em>, <em class="Code">-make_coexistence</em>,
                  <em class="Code">-recurse</em>, <em class="Code">-reldefs</em>,
                  and <em class="Code">-type</em> options as well as input files
                  are ignored. Environment variables may be accessed through
                  <em class="Code">$NAME</em>, where <em class="Code">NAME</em> is
                  the environment variable name. The <em class="Code">cmdline</em>
                  assignment may be useful for workspaces that require specific
                  <em class="Code">mwc.pl</em> options in order to process
                  correctly.
                </p>

                <p class="Body">
                  The only other setting supported by mwc.pl is
                  <em class="Code">implicit</em>. If <em class="Code">implicit</em>
                  is set to <em class="Code">1</em> then default project files are
                  generated in each directory where no mpc file exists. The
                  <em class="Code">implicit</em> keyword can also be set to the
                  name of a base project. In this case, the implicitly generated
                  project will inherit from the base project specified in the
                  assignment. Either way, if the directory does not contain files
                  that can be used within a project, no project is created. Setting
                  <em class="Code">implicit</em> can be useful when you want to
                  define specific workspaces, but the MPC defaults are sufficient
                  for the directories involved within the workspace.
                </p>

                <p class="Body">
                  <a name="workspaceSpecific"></a>Workspaces
                  support a <em class="Code">specific</em> clause
                  conceptually and syntactically similar to <a
            href="#projectSpecific">
                    the project <em
class="Code">specific</em> clause.
                  </a>  Any variables
                  assigned within the clause are only available to
                  workspaces, not to projects.   Two sorts of assignments are
                  possible: first are assignments to the keywords
                  <em class="Code">cmdline</em> and <em class="Code">implicit</em>
                  and the second are type-specific variables.  Consult the
                  documentation for the type for details on type-specific variables.
                  Keyword assignments impact the entire workspace, not just the
                  <em class="Code">specific</em> scope.
                </p>

                <p class="Body">
                  Scoped assignments are assignments that are
                  associated with specific mpc files or directories listed with the
                  scope of the assignment. The following example shows a scoped
                  assignment of <em class="Code">cmdline</em> that only applies to
                  <em class="Code">
                    one of the mpc files listed in the
                    workspace
                  </em>. In this example, <em class=
            "Code">directory/foo.mpc</em> would be processed as if the
                  <em class="Code">-static</em> option had been passed on the
                  command line whereas other directories and mpc files would
                  not.
                </p>

                <blockquote>


                  <p class="Code">workspace {</p>

                  <p class="Code">&nbsp;&nbsp;...</p>

                  <p class="Code">&nbsp;&nbsp;static {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;cmdline += -static</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;directory/foo.mpc</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">&nbsp;&nbsp;exclude(gnuace, make) {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;some.mpc</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">
                    &nbsp;&nbsp;// Associate the name "other" with
                    dir3
                  </p>

                  <p class="Code">&nbsp;&nbsp;associate(other) {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;dir3</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">}</p>

                </blockquote>

                <p class="Body">
                  Exclusion sections are used to prevent
                  directories and mpc files from being processed. These excluded
                  directories and mpc files will be skipped when generating project
                  files and workspaces. The <em class="Code">exclude</em> keyword
                  accepts project types as well as properties (see <a href=
            "MakeProjectCreator.html#properties" class="XRef">Properties</a>)
                  within the parentheses (as above), which will cause the workspace
                  creator to only exclude the listing for particular types. If no
                  types are provided, exclusion will take place for all project
                  types.
                </p>

                <p class="Body">
                  The <em class="Code">associate</em> scope
                  associates a name with one or more directories. This does not add
                  directories to a workspace, it only makes an association. This
                  may or may not have an effect on the generated workspace; it
                  depends solely upon whether the project type supports
                  associations. Currently <em class="Code">automake</em> is the
                  only project type that supports associations. Each directory
                  listed under an association is grouped together and built
                  conditionally based on the association name.
                </p>

                <p class="Body">
                  Comments are similar to the C++ style comments.
                  Any text after a double slash (<em class="Code">//</em> ) is
                  considered a comment.
                </p>

              </div>

            <div>
              <h5 class="Head4">mpc and mpb files</h5>

              <div>
                <a name="Base_Project"></a>
                <h6 class="Head5">Project Declarations</h6>


                <p class="Body">
                  Project declarations are similar to
                  workspace declarations, but are a bit more complex. An mpc file
                  can contain one or more &ldquo;projects&rdquo; and each project
                  can inherit from base projects.
                </p>

                <blockquote>
                  <p class="Code">&nbsp;</p>

                  <p class="Code">
                    project(optional name): base_project,
                    another_base_project {
                  </p>

                  <p class="Code">&nbsp;&nbsp;exename = client</p>

                  <p class="Code">
                    &nbsp;&nbsp;includes += directory_name
                    other_directory
                  </p>

                  <p class="Code">&nbsp;&nbsp;libpaths += /usr/X11R6/lib</p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">&nbsp;&nbsp;Header_Files {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.h</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.h</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;fileN.h</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">&nbsp;&nbsp;Source_Files {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.cpp</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.cpp</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;fileN.cpp</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">}</p>

                </blockquote>

                <p class="BodyNoLead">
                  If the optional project name is not
                  given, then the project name is taken from the name of the mpc
                  file without the extension. Therefore, if your mpc file is
                  going to contain multiple projects, it is important to provide
                  project names to prevent each generated project from
                  overwriting the other. MPC will issue an error and stop if
                  duplicate project names are detected.
                </p>

              </div>

              <div>
                <h6 class="Head5">Base Projects</h6>


                <p class="BodyNoLead">
                  Base projects can be of the extension
                  <em class="Code">mpb</em> and <em class="Code">mpc</em>. If a
                  file with the name of the base project with an <em class=
              "Code">mpb</em> or <em class="Code">mpc</em> extension cannot
                  be found within the mpc include search path, a fatal error is
                  issued and processing halts.
                </p>
              </div>

              <div>
                <h6 class="Head5">Assignment Keywords</h6>


                <p class="Body">
                  This table shows the keywords that can
                  be used in an assignment (i.e., <em class="Code">=</em>,
                  <em class="Code">+=</em> or <em class="Code">-=</em> ) within
                  an mpc file. The most commonly used keywords are shown in bold
                  face.
                </p>

                <p style="list-style: none">
                  <h6 class="NumberedTableTitle">
                    <a name="82186"></a>Assignment
                    Keywords
                  </h6>

                  <p class="Body">
                    <table border="1" summary="Assignment Keywords">
                      <tr>
                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Keyword</p>
                        </th>

                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Description</p>
                        </th>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">after</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies that this project must be
                            built after 1 or more project names listed.
                          </p>
                          <p class="Tbl-Body">
                            An extended syntax is available
                            in order to associate name-value pairs with a
                            dependency: <em class="Code">
                              &lt;project
                              name[:name=value]&gt;
                            </em><br>
                      These name-value pairs may be used in the creation
                      of the dependencies of the project.


                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">avoids</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies which features should be
                            disabled in order to generate the project file. Under
                            the GNUACE type, it also specifies which make macros
                            should not be set to build the target.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">custom_only</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This setting instructs MPC to
                            create projects that only contain custom generation
                            targets. Any files included in the projects will be
                            provided by custom component lists defined through the
                            use of <em class="Code">Define_Custom</em>.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">dependent_upon</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This keyword can only be used
                            as a header component scoped setting (ie. inside
                            the scope of Header_Files).  It determines which
                            file the header file is dependent upon for vc8,
                            and vc9 only.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">dllout</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If defined, specifies where the
                            dynamic libraries will be placed. This overrides libout
                            in the dynamic case.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">dynamicflags</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies preprocessor flags passed
                            to the compiler when building a dynamic library.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">exename</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Determines that the project will be
                            an executable and the name of the executable
                            target.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">exeout</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies where executables will be
                            placed.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">includes</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies one or more directories
                            to supply to the compiler for use as include search
                            paths.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">libout</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies where the dynamic and
                            static libraries will be placed.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">libpaths</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies one or more directories
                            to supply to the compiler for use as library search
                            paths.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">libs</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies one or more libraries to
                            link into the target. Library modifiers may be added
                            when being processed in the template file. For example,
                            library modifiers are added when using the vc6 project
                            type.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">lit_libs</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as libs except
                            that a library modifier will not be added.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">macros</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Values supplied here will be passed
                            directly to the compiler as command line defined
                            macros.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">managed</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies that the source files
                            should be compiled as managed C++. This is only
                            supported by the <em class="Code">nmake</em>,
                            <em class="Code">vc7</em>, <em class="Code">vc71</em>,
                            <em class="Code">vc8</em>, <em class="Code">vc9</em>,
                            <em class="Code">vc10</em>, <em class="Code">vc11</em>,
                            <em class="Code">vc12</em>, <em class="Code">vc14</em>,
                            <em class="Code">vc12</em>, <em class="Code">vc14</em>,
                            and <em class="Code">vs*</em> project types.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">no_pch</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            It specifies that precompiled
                            headers should not be used for the source files listed
                            within the scope of it&rsquo;s setting. This keyword
                            can only be used as a source component scoped setting
                            (i.e., inside the scope of Source_Files).
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">pch_header</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The name of the precompiled header
                            file. See the discussion below this table for more
                            information.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">pch_source</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The name of the precompiled source
                            file. See the discussion below this table for more
                            information.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">postbuild</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If this is defined in the project,
                            the value will be interpreted as commands to run after
                            the project has been successfully built. The <em class=
                      "Code">&lt;% %&gt;</em> construct (see <a href=
                      "MakeProjectCreator.html#MPD_Syntax" class=
                      "XRef">Template Files</a>) can be used within this
                            value to access template variables and functions of the
                            template parser. See <a href=
                      "#Common_Pseudo_Variables" class="XRef">
                              Common
                              Pseudo Variables
                            </a> for a list of pseudo variables
                            that are also available.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">postclean</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If this is defined in the project,
                            the value will be interpreted as commands to run after
                            the project has been cleaned. It should be noted that
                            this setting is not supported by all project types. As
                            with <em class="Code">postbuild</em>, the <em class=
                      "Code">&lt;% %&gt;</em> construct (see <a href=
                      "MakeProjectCreator.html#MPD_Syntax" class=
                      "XRef">Template Files</a>) can be used within this
                            value to access template variables and functions of the
                            template parser. See <a href=
                      "#Common_Pseudo_Variables" class="XRef">
                              Common
                              Pseudo Variables
                            </a> for a list of pseudo variables
                            that are also available.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">prebuild</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If this is defined in the project,
                            the value will be interpreted as commands to run before
                            the project has been built. As with <em class=
                      "Code">postbuild</em>, the <em class="Code">
                              &lt;%
                              %&gt;
                            </em> construct (see <a href=
                      "MakeProjectCreator.html#MPD_Syntax" class=
                      "XRef">Template Files</a>) can be used within this
                            value to access template variables and functions of the
                            template parser. See <a href=
                      "#Common_Pseudo_Variables" class="XRef">
                              Common
                              Pseudo Variables
                            </a> for a list of pseudo variables
                            that are also available.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">pure_libs</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is similar to <em class=
                      "Code">lit_libs</em> except that no prefix or extension
                            is added to the names specified.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">recurse</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If set to 1, MPC will recurse into
                            directories listed under component listings (such as
                            Source_Files, Header_Files, etc.) and add any component
                            corresponding files to the list. This keyword can be
                            used as a global project setting or a component scoped
                            setting.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">recursive_includes</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is similar to <em class=
                      "Code">includes</em> in that it provides include paths
                            to the compiler. However, each path supplied will be
                            recursively searched for sub-directories which will
                            also be provided as include paths to the compiler.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">recursive_libpaths</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is similar to <em class=
                      "Code">libpaths</em> in that it provides library search
                            paths to the linker. However, each path supplied will
                            be recursively searched for sub-directories which will
                            also be provided as library search paths to the
                            linker.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">requires</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies which features should be
                            enabled in order to generate the project file. Under
                            the GNUACE type, it also specifies which make macros
                            should be set to build the target.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">sharedname</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Determines that the project will be
                            a library and the name of the dynamic library target.
                            See the discussion below this table for more
                            information.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">staticflags</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies preprocessor flags passed
                            to the compiler when building a static library.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="Bold">
                              <em class=
                      "TableCode">staticname</em>
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Determines that the project will be
                            a library and the name of the static library
                            target.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">tagchecks</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            For GNUACE Make only, specifies one
                            or more names to search for in the macros specified by
                            tagname.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">tagname</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies the GNUACE Make macro to
                            check before building the target.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">version</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Specifies the version number for
                            the library or executable.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">webapp</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Determines whether the project is a
                            Web Application. A web application project will have no
                            project file written but the information will be
                            included in the workspace if web applications are
                            supported by the project type.
                          </p>
                        </td>
                      </tr>
                    </table>

                  </p>

                  <p class="Body">
                    Assignments can also use the <em class=
              "Code">+=</em> and <em class="Code">-=</em> operators to add
                    and subtract values from keyword values.
                  </p>

                  <p class="Body">
                    Assignments can be bracketed by curly braces
                    so they can span multiple lines. The opening curly brace must
                    be the last thing on the same line as the operator and the closing
                    brace must be on its own line (but can have leading white space).
                    Optionally, \n, \s, or \ns can be included after the operator.  These
                    indicate that new lines should be retained (\n) and leading white space
                    should be retained (\s).
                  </p>

                  <blockquote>

                    <p class="Code">specific(rpmspec) {</p>
                    <p class="Code">&nbsp;rpm_description = \ns {</p>
                    <p class="Code">This description</p>
                    <p class="Code">spans multiple lines.</p>
                    <p class="Code">&nbsp;}</p>
                    <p class="Code">}</p>

                  </blockquote>

                  <p class="Body">
                    If a <em class="Code">sharedname</em> is
                    specified in the mpc file and <em class="Code">staticname</em>
                    is not used, then <em class="Code">staticname</em> is assumed
                    to be the same as <em class="Code">sharedname</em>. This also
                    applies in the opposite direction.
                  </p>

                  <p class="Body">
                    If neither exename, sharedname nor staticname
                    is specified, MPC will search the source files for a <em class=
              "Code">main</em> function. If a <em class="Code">main</em> is
                    found, the exename will be set to the name of the file, minus
                    the extension, that contained the <em class="Code">main</em>
                    function. Otherwise, sharedname and staticname will be set to
                    the project name.
                  </p>

                  <p class="Body">
                    If the project name, exename, sharedname or
                    staticname contain an asterisk it instructs MPC to dynamically
                    determine a portion of the name based on certain defaults. If
                    the project name contains an asterisk, then the asterisk will
                    be replaced with the default project name. If exename,
                    sharedname or staticname contains an asterisk, then the
                    asterisk will be replaced with the project name.
                  </p>

                  <p class="Body">
                    If the <em class="Code">pch_header</em>
                    keyword is not used and a file exists, in the directory in
                    which the mpc file is located, that matches <em class=
              "Code">*_pch.h</em> it is assumed to be the precompiled header
                    for that directory. If there are multiple pch files in the
                    directory, then the precompiled header that closely matches the
                    project name will be chosen. Similar logic applies for the
                    <em class="Code">pch_source</em> keyword.
                  </p>

                </div>

              <div>
                <a name="16907"></a>

                <h6 class="Head5">Components</h6>


                <p class="BodyNoLead">
                  An mpc file can also specify the files
                  to be included in the generated &ldquo;project&rdquo; file.
                  These files are specified using the component names shown in
                  the following table. However, most of the time users will want
                  to allow MPC to provide the default values for project
                  files.
                </p>

                <p style="list-style: none">
                  <h6 class="NumberedTableTitle">
                    Component Names and Default
                    Values
                  </h6>

                  <table border="1" summary=
                "Component Names and Default Values">
                    <tr>
                      <th rowspan="1" colspan="1">
                        <p class="Tbl-Heading">Name</p>
                      </th>

                      <th rowspan="1" colspan="1">
                        <p class="Tbl-Heading">Default Value</p>
                      </th>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                      "TableCode">Source_Files</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Defaults to all files in the
                          directory that have the following extensions:
                          <em class="Code">cpp</em>, <em class="Code">cxx</em>,
                          <em class="Code">cc</em>, <em class="Code">c</em>, and
                          <em class="Code">C</em>.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                      "TableCode">Header_Files</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Defaults to all files in the
                          directory that have the following extensions:
                          <em class="Code">h</em>, hpp, <em class=
                      "Code">hxx</em>, and <em class="Code">hh</em>.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                      "TableCode">Inline_Files</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Defaults to all files in the
                          directory that have the following extensions:
                          <em class="Code">i</em> and <em class=
                      "Code">inl</em>.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                      "TableCode">Template_Files</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Defaults to all files in the
                          directory that end in the following: <em class=
                      "Code">_T.cpp</em>, <em class="Code">_T.cxx</em>,
                          <em class="Code">_T.cc</em>, <em class=
                      "Code">_T.c</em>, and <em class="Code">_T.C</em>.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                      "TableCode">Documentation_Files</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Defaults to all files in the
                          directory that match the following: <em class=
                      "Code">README</em>, <em class="Code">readme</em>,
                          <em class="Code">.doc</em>, <em class="Code">.html</em>
                          and <em class="Code">.txt</em>.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                      "TableCode">Resource_Files</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Defaults to all files in the
                          directory that match the project name and have an
                          <em class="Code">rc</em> extension.
                        </p>
                      </td>
                    </tr>
                  </table>
                </p>

                <p class="Body">
                  If a component is not specified in the mpc
                  file, the default value will be used. To disallow a particular
                  set of files that may exist in the directory, you must declare
                  an empty set of the particular component type.
                </p>

                <p class="Body">
                  Each component name accepts two forms. The
                  first form is a simple list of files within the construct.
                </p>

                <blockquote>


                  <p class="Code">Source_Files {</p>

                  <p class="Code">&nbsp;&nbsp;file1.cpp</p>

                  <p class="Code">&nbsp;&nbsp;file2.cpp</p>

                  <p class="Code">}</p>


                </blockquote>

                <p class="Body">
                  The second form is a complex list of files
                  within named blocks.
                </p>

                <blockquote>
                  <a name="MPC grouping example"></a>



                  <p class="Code">Source_Files(MACRO_NAME) {</p>

                  <p class="Code">&nbsp;&nbsp;BlockA {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file1.cpp</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file2.cpp</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">&nbsp;&nbsp;BlockB {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file3.cpp</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;file4.cpp</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">}</p>


                </blockquote>

                <p class="Body">
                  The second form allows the user to logically
                  group the files to make future maintenance easier. Using this
                  form has the effect of visually grouping files in the generated
                  project file for the <em class="Code">em3</em>, <em class=
              "Code">gnuace</em>, <em class="Code">vc6</em>, <em class=
              "Code">vc7</em>, <em class="Code">vc71</em>, <em class="Code">vc8</em>,
              <em class="Code">vc9</em>, <em class="Code">vc10</em>, <em class="Code">vc11</em>,
              <em class="Code">vc12</em>, <em class="Code">vc14</em>,
              and <em class="Code">vs*</em> project types.
                </p>

                <p class="Body">
                  If a file is listed in the <em class=
              "Code">Source_Files</em> component list and a corresponding
                  header or inline file exists in the directory, it is added to
                  the corresponding component list unless it is already
                  listed.
                </p>

              </div>

              <div>
                <h6 class="Head5">Verbatim Clause</h6>


                <p class="BodyNoLead">
                  The <em class="Code">verbatim</em>
                  construct can be used to place text into a generated project
                  file verbatim. The <em class="Code">verbatim</em> syntax is as
                  follows:
                </p>

                <blockquote>

                  <p class="Code">
                    verbatim(&lt;project type&gt;,
                    &lt;location&gt;) {
                  </p>

                  <p class="Code">&nbsp;&nbsp;...</p>

                  <p class="Code">}</p>


                </blockquote>

                <p class="Body">
                  When MPC is generating a project of type
                  <em class="Code">&lt;project type&gt;</em> and encounters a
                  <em class="Code">marker</em> in the template file (see <a href=
              "MakeProjectCreator.html#38037" class="XRef">
                    Template File
                    Keywords
                  </a>) that matches the <em class=
              "Code">&lt;location&gt;</em> name, it will place the text found
                  inside the construct directly into the generated project. If
                  the text inside the construct requires that white space be
                  preserved, each line must be enclosed in double quotes. The
                  following <em class="Code">verbatim</em> example would result
                  in <em class="Code">gnuace</em> generated projects having a
                  rule at the bottom of the GNUmakefile where the <em class=
              "Code">all:</em> target depends on <em class=
              "Code">foo</em>.
                </p>

                <blockquote>

                  <p class="Code">verbatim(gnuace, bottom) {</p>

                  <p class="Code">&nbsp;&nbsp;all: foo</p>

                  <p class="Code">}</p>
                </blockquote>

              </div>

              <div>
                <h6 class="Head5">Expand Clause</h6>


                <p class="BodyNoLead">
                  The <em class="Code">expand</em> keyword
                  can be used to provide values for variable names enclosed
                  within <em class="Code">$()</em>. In the example below, we see
                  the name <em class="Code">VAR_NAME</em> inside the parenthesis.
                  Whenever MPC sees <em class="Code">$(VAR_NAME)</em> it will
                  attempt to replace it with values from the expansion list. MPC
                  will first try to replace it with the value of the environment
                  variable named <em class="Code">ENV_VAR</em>. If that
                  environment variable has a value, it will be used. Otherwise,
                  it will continue down the list until a suitable value is found.
                  In this example, the text <em class=
              "Code">last_resort_value</em> will be used. MPC will leave the
                  <em class="Code">$()</em> value as it was in the event that no
                  value is found.
                </p>

                <blockquote>

                  <p class="Code">expand(VAR_NAME) {</p>

                  <p class="Code">&nbsp;&nbsp;$ENV_VAR</p>

                  <p class="Code">&nbsp;&nbsp;last_resort_value</p>

                  <p class="Code">}</p>
                </blockquote>

              </div>

              <div>
                <h6 class="Head5">
                  <a name="projectSpecific">Specific Clause</a>
                </h6>


                <p class="BodyNoLead">
                  The <em class="Code">specific</em>
                  keyword can be used to define assignments that are specific to
                  a particular project type or property specified in the
                  parenthesis. This will allow platform or OS-specific values to
                  be placed into a project. For example, on one platform you may
                  want to link in a library named <em class="Code">qt-mt</em>,
                  but on another you need to link in <em class=
              "Code">qt-mt230nc</em>.
                </p>

                <blockquote>


                  <p class="Code">specific(prop:windows) {</p>

                  <p class="Code">&nbsp;&nbsp;lit_libs += qt-mt230nc</p>

                  <p class="Code">} else {</p>

                  <p class="Code">&nbsp;&nbsp;lit_libs += qt-mt</p>

                  <p class="Code">}</p>


                </blockquote>

                <p class="Body">
                  If an else clause is provided, it is required
                  to be on the same line as the closing curly brace. You may also
                  negate the project type or property (using &rsquo;!&rsquo;)
                  which will cause the specific to be evaluated for all types
                  except the type specified.
                </p>

                <p class="Body">
                  If a keyword used within a <em class=
              "Code">specific</em> section is not recognized as a valid MPC
                  keyword, it is interpreted to be template value modifier. In
                  this situation, this construct works exactly the same way as
                  the <em class="Code">-value_template</em> command line option
                  (see <a href="MakeProjectCreator.html#Command%20Line%20Options"
   class="XRef">Command Line Options</a>).
                </p>

                <a name="properties">
                  <p class="Body">
                    The following table shows which properties
                    apply to which project types. The <em class="Code">static</em>
                    property (not represented in the table) is set if the -static
                    option is supplied when processing the project files.
                    Additionally, a property that corresponds to the  language
                    will be set (e.g., cplusplus, csharp, java, vb).
                  </p>

                  <p class="Body">
                    <h6 class="NumberedTableTitle">
                      <a name=
                "Property_Table"></a>Property Table
                    </h6>

                    <p class="Body">
                      <table border="1" summary="Property Table">
                        <tr>
                          <th rowspan="1" colspan="1">
                            <p class="Tbl-Heading">Project Type</p>
                          </th>

                          <th rowspan="1" colspan="1">
                            <p class="Tbl-Heading">borland</p>
                          </th>

                          <th rowspan="1" colspan="1">
                            <p class="Tbl-Heading">make</p>
                          </th>

                          <th rowspan="1" colspan="1">
                            <p class="Tbl-Heading">microsoft</p>
                          </th>

                          <th rowspan="1" colspan="1">
                            <p class="Tbl-Heading">windows</p>
                          </th>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class=
                      "TableCode">automake</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class=
                      "TableCode">bcb2007</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class=
                      "TableCode">bcb2009</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">bds4</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class=
                      "TableCode">bmake</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">cc</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">em3</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">ghs</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Depends</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">make</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class=
                      "TableCode">nmake</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">vc6</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">vc7</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">vc71</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">vc8</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">vc9</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">vc10</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">vc11</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">vc12</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class="TableCode">wix</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">&nbsp;</p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">Yes</p>
                          </td>
                        </tr>
                      </table>
                    </p>
                  </p>

                  <p class="Body">
                    The ghs project type can be used on both
                    Windows and UNIX. The windows property will be active if the
                    <em class="Code">MPC_GHS_UNIX</em> environment variable is not
                    set during project generation.
                  </p>

                </div>

              <div>
                <h6 class="Head5">Conditional Clause</h6>


                <p class="Body">
                  This scope allows addition of source files
                  conditionally based on a particular project type or property
                  (see the <a href="#Property_Table" class="XRef">
                    property
                    table
                  </a>). The syntax is as follows:
                </p>

                <blockquote>
                  <p class="Code">&nbsp;</p>

                  <p class="Code">
                    conditional(&lt;project type|property&gt; [,
                    &lt;project type|property&gt; ...]) {
                  </p>

                  <p class="Code">&nbsp;&nbsp;source1.cpp</p>

                  <p class="Code">&nbsp;&nbsp;...</p>

                  <p class="Code">}</p>



                  <p class="Code">
                    conditional(&lt;project type|property&gt; [,
                    &lt;project type|property&gt; ...]) {
                  </p>

                  <p class="Code">&nbsp;&nbsp;source1.cpp</p>

                  <p class="Code">&nbsp;&nbsp;...</p>

                  <p class="Code">} else {</p>

                  <p class="Code">&nbsp;&nbsp;source2.cpp</p>

                  <p class="Code">&nbsp;&nbsp;...</p>

                  <p class="Code">}</p>


                </blockquote>

                <p class="Body">
                  If the else is provided, it is required to be
                  on the same line as the closing curly brace. You may also
                  negate the project type (using &rsquo;!&rsquo;) which will
                  cause the conditional to be evaluated for all types except the
                  type specified.
                </p>

              </div>

              <div>
                <a name="Custom_Types_and_Build_Rules"></a>

                <h6 class="Head5">Custom Types and Build Rules</h6>


                <p class="Body">
                  MPC allows you to define your own custom
                  file types to support a variety of custom build rules. Below is
                  an example of a custom definition.
                </p>

                <blockquote>

                  <p class="Code">project {</p>

                  <p class="Code">&nbsp;&nbsp;Define_Custom(MOC) {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;automatic = 0</p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;command =
                    $(QTDIR)/bin/moc
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;output_option =
                    -o
                  </p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;inputext = .h</p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;pre_extension =
                    _moc
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;source_outputext =
                    .cpp
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;keyword mocflags =
                    commandflags
                  </p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">&nbsp;&nbsp;// Custom Component</p>

                  <p class="Code">&nbsp;&nbsp;MOC_Files {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;QtReactor.h</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">&nbsp;&nbsp;Source_Files {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;QtReactor_moc.cpp</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">}</p>

                  <p class="Code">&nbsp;</p>
                </blockquote>

                <p class="Body">
                  The above example defines a custom file type,
                  &ldquo;<em class="Code">MOC</em> &rdquo;, that describes basic
                  information about how to process the input files and what
                  output files are created. Once the custom file type is defined,
                  <em class="Code">MOC_Files</em> can be used to specify the
                  input files for this new file type.
                </p>

                <p class="Body">
                  Define_Custom definitions may use single
                  inheritance.  This is useful for creating aliased names:
                </p>
                <blockquote>
                  <p class="Code">Define_Custom(QtMOC) : MOC {</p>
                  <p class="Code">}</p>
                </blockquote>

                <p class="Body">
                  The following table contains the keywords that
                  can be used within the scope of <em class=
              "Code">Define_Custom</em>.
                </p>

                <p style="list-style: none">
                  <a name="32899"></a>

                  <h6 class="NumberedTableTitle">Define_Custom Keywords</h6>

                  <p class="Body">
                    <table border="1" summary="Define_Custom Keywords">
                      <tr>
                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Keyword</p>
                        </th>

                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Description</p>
                        </th>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">automatic_in</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If set to 1, then attempt to
                            automatically determine which files belong to the set
                            of input files for the custom type. If set to 0, then
                            no files are automatically added to the input
                            files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">automatic_out</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If set to 1, then attempt to
                            automatically determine which generated files belong to
                            the set of components (<em class=
                      "Code">Source_Files</em>, <em class=
                      "Code">Inline_Files</em> , <em class=
                      "Code">Header_Files</em>, <em class=
                      "Code">Template_Files</em>, <em class=
                      "Code">Resource_Files</em> and <em class=
                      "Code">Documentation_Files</em>) based on type files
                            that the command generates. If omitted, then
                            automatic_out is assumed to be 1.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">command</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The name of the command that should
                            be used to process the input files for the custom
                            type.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">commandflags</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            Any options that should be passed
                            to the command.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">dependent</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If this is given a value, then a
                            dependency upon that value will be given to all of the
                            generated files. The default for this is unset and no
                            dependency will be generated.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">dependent_libs</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If this is given a value, then a dependency upon that
                            library value will be given to all of the generated files.
                            The format for this entry should be the basename for the
                            library (no library prefix, postfix, or extension)
                            preceded by any relative or absolute path to the library.
                            The typical use for this would be so that a project is
                            rebuilt when a library needs to be rebuilt for its
                            dependent executable. The default for this is unset and no
                            dependency will be generated.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">inputext</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is a comma separated list of
                            input file extensions that belong to the command.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class="TableCode">
                              keyword
                              &lt;name&gt;
                            </em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is a special assignment that
                            allows the user to map &lt;name&gt; into the project
                            level namespace. The value (if any) that is assigned to
                            this construct must be one of the keywords that can be
                            used within a Define_Custom clause. The result of this
                            assignment is the ability modify the value of keywords
                            that are normally only accessible within the scope of a
                            custom component (e.g. <em class="Code">command</em>,
                            <em class="Code">commandflags</em>, etc.).
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">libpath</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If the command requires a library
                            that is not in the normal library search path, this
                            keyword can be used to ensure that the command is able
                            to find the library that it needs to run.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">output_option</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If the command takes an option to
                            specify a single file output name, then set it here.
                            Otherwise, this should be omitted.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">output_follows_input</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This setting defaults to 1 and
                            indicates that output files from the custom command
                            will end up in the same directory as the input files.
                            If this is set to 0, it is assumed that the output
                            files will go into the same directory as the .mpc
                            file.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">pch_postrule</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If this is set to 1, then a rule
                            will be added to the custom rule that will modify the
                            source output files to include the precompiled header
                            file.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">postcommand</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This allows users to create
                            arbitrary commands that will be run after the main
                            command is run to process the custom input files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">pre_extension</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If the command produces multiple
                            files of the same extension, this comma separated list
                            can be used to specify them. For example, <em class=
                      "Code">tao_idl</em> creates two types of files per
                            extension (<em class="Code">C.h</em>, <em class=
                      "Code">S.h</em>, <em class="Code">C.cpp</em>,
                            <em class="Code">S.cpp</em>, etc.) This applies to all
                            extension types.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">source_pre_extension</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_extension
                            except that it only applies to source files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">inline_pre_extension</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_extension
                            except that it only applies to inline files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">header_pre_extension</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_extension
                            except that it only applies to header files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">template_pre_extension</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_extension
                            except that it only applies to template files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">resource_pre_extension</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_extension
                            except that it only applies to resource files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">documentation_pre_extension</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_extension
                            except that it only applies to documentation files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">generic_pre_extension</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_extension
                            except that it only applies to generic files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">pre_filename</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The syntax for this is the same as
                            <em class="Code">pre_extension</em>, but the values
                            specified are prepended to the file name instead of the
                            extension. This applies to all extension types.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">source_pre_filename</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_filename
                            except that it only applies to source files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">inline_pre_filename</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_filename
                            except that it only applies to inline files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">header_pre_filename</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_filename
                            except that it only applies to header files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">template_pre_filename</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_filename
                            except that it only applies to template files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">resource_pre_filename</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_filename
                            except that it only applies to resource files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">documentation_pre_filename</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_filename
                            except that it only applies to documentation files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">generic_pre_filename</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_filename
                            except that it only applies to generic files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">pre_dirname</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The syntax for this is the same as
                            <em class="Code">pre_filename</em>, but the value
                            specified is prepended to the directory portion of the
                            file name instead of the file name itself. If a
                            separate directory is desired, the <em class=
                      "Code">pre_dirname</em> setting should end in a
                            slash.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">source_pre_dirname</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_dirname
                            except that it only applies to source files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">inline_pre_dirname</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_dirname
                            except that it only applies to inline files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">header_pre_dirname</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_dirname
                            except that it only applies to header files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">template_pre_dirname</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_dirname
                            except that it only applies to template files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">resource_pre_dirname</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_dirname
                            except that it only applies to resource files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">documentation_pre_dirname</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_dirname
                            except that it only applies to documentation files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">generic_pre_dirname</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is the same as pre_dirname
                            except that it only applies to generic files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">source_outputext</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is a comma separated list of
                            possible source file output extensions. If the command
                            does not produce source files, then this can be
                            omitted.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">inline_outputext</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is a comma separated list of
                            possible inline file output extensions. If the command
                            does not produce inline files, then this can be
                            omitted.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">header_outputext</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is a comma separated list of
                            possible header file output extensions. If the command
                            does not produce header files, then this can be
                            omitted.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">template_outputext</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is a comma separated list of
                            possible template file output extensions. If the
                            command does not produce template files, then this can
                            be omitted.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">resource_outputext</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is a comma separated list of
                            possible resource file output extensions. If the
                            command does not produce resource files, then this can
                            be omitted.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">documentation_outputext</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This is a comma separated list of
                            possible documentation file output extensions. If the
                            command does not produce documentation files, then this
                            can be omitted.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">generic_outputext</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            If the command does not generate
                            any of the other output types listed above, then the
                            extensions should be listed under this.
                          </p>
                        </td>
                      </tr>
                    </table>
                  </p>
                </p>

                <p class="Body">
                  There is a special interaction between custom
                  components and the source, header and inline components. If a
                  <em class="Code">custom</em> definition is set to be
                  &ldquo;automatic&rdquo; and custom component files are present
                  but not specified, the default custom generated names are added
                  to the source, header and inline component lists unless those
                  names are already listed (or partially listed) in those
                  component lists. See <a href=
              "MakeProjectCreator.html#Custom_Types_and_Build_Rules"
              class="XRef">Custom Types and Build Rules</a> for more
                  information about defining your own custom type.
                </p>

                <p class="Body">
                  Particular output extensions for custom build
                  types are not required. However, at least one output extension
                  type is required for MPC to generate a target. Your command
                  does not necessarily have to generate output, but an extension
                  type is required if you want the input file to be processed
                  during the project compilation.
                </p>

                <p class="Body">
                  If the custom output can not be represented
                  with the above output extension keywords (*_outputext) and you
                  have knowledge of the output files <em class="Emphasis">
                    a
                    priori
                  </em>, you can represent them with the <em class=
              "Code">&gt;&gt;</em> construct.
                </p>

                <p class="Body">
                  Below is an example that demonstrates the use
                  of <em class="Code">&gt;&gt;</em>. The command takes an input
                  file name of foo.prp and produces two files that have
                  completely unrelated filenames, <em class="Code">hello.h</em>
                  and <em class="Code">hello.cpp</em>.
                </p>

                <blockquote>

                  <p class="Code">project {</p>

                  <p class="Code">&nbsp;&nbsp;Define_Custom(Quogen) {</p>

                  <p class="Code">&nbsp;&nbsp;automatic = 0</p>

                  <p class="Code">&nbsp;&nbsp;command = perl quogen.pl</p>

                  <p class="Code">
                    &nbsp;&nbsp;commandflags = --debuglevel=1
                    --language=c++ \
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;--kernel_language=c++
                  </p>

                  <p class="Code">&nbsp;&nbsp;inputext = .prp</p>

                  <p class="Code">
                    &nbsp;&nbsp;keyword quogenflags =
                    commandflags
                  </p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">&nbsp;&nbsp;Quogen_Files {</p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;foo.prp &gt;&gt;
                    hello.h hello.cpp
                  </p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">&nbsp;&nbsp;Source_Files {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;hello.cpp</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">}</p>

                  <p class="Code">&nbsp;</p>
                </blockquote>

                <p class="Body">
                  You can use the <em class="Code">&lt;&lt;</em>
                  construct to represent dependencies for specific custom input
                  file. For instance, in the above example, assume that foo.prp
                  depends upon foo.in, we would represent this by adding
                  <em class="Code">&lt;&lt;</em> foo.in as shown below.
                </p>

                <blockquote>

                  <p class="Code">Quogen_Files {</p>

                  <p class="Code">
                    &nbsp;&nbsp;foo.prp &gt;&gt; hello.h
                    hello.cpp &lt;&lt; foo.in
                  </p>

                  <p class="Code">}</p>

                  <p class="Code">&nbsp;</p>
                </blockquote>

                <p class="Body">
                  An additional construct can be used within the
                  scope of a <em class="Code">Define_Custom</em>. This construct
                  is called <em class="Code">optional</em>, and can be used to
                  represent optional custom command output that is dependent upon
                  particular command line parameters passed to the custom
                  command.
                </p>

                <blockquote>

                  <p class="Code">project {</p>

                  <p class="Code">&nbsp;&nbsp;Define_Custom(TEST) {</p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;optional(keyword)
                    {
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;flag_keyword(option) +=
                    value [, value]
                  </p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;}</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">}</p>
                </blockquote>

                <p class="Body">
                  In the above fragment, <em class=
              "Code">keyword</em> can be any of the <em class=
              "Code">pre_extension</em>, <em class="Code">pre_filename</em>
                  keywords or any of the keywords that end in <em class=
              "Code">_outputext</em>. The <em class="Code">flag_keyword</em>
                  can be any of the custom definition keywords, however only
                  <em class="Code">commandflags</em> has any functional value.
                  The <em class="Code">flag_keyword</em> value is searched for
                  the <em class="Code">option</em> value contained inside the
                  parenthesis. If it is found the <em class="Code">value</em> or
                  <em class="Code">values</em> after the += are added to the list
                  specified by <em class="Code">keyword</em>. This can also be
                  negated by prefixing the <em class="Code">option</em> with an
                  exclamation point (!).
                </p>

                <p class="Body">
                  The example below shows how the <em class=
              "Code">optional</em> construct is used by the custom definition
                  for the <em class="Code">tao_idl</em> command (see <em class=
              "Code">ACE_wrappers/TAO/MPC/config/taoidldefaults.mpb</em> ).
                  The <em class="Code">-GA</em> option causes <em class=
              "Code">tao_idl</em> to generate an additional source file
                  (based on the idl file name) with an <em class=
              "Code">A.cpp</em> extension. The <em class="Code">-Sc</em>
                  option causes <em class="Code">tao_idl</em> to suppress the
                  generation of <em class="Code">S_T</em> related files.
                </p>

                <blockquote>

                  <p class="Code">Define_Custom(IDL) {</p>

                  <p class="Code">&nbsp;&nbsp;...</p>

                  <p class="Code">&nbsp;&nbsp;inputext = .idl</p>

                  <p class="Code">&nbsp;&nbsp;source_pre_extension = C, S</p>

                  <p class="Code">&nbsp;&nbsp;header_pre_extension = C, S</p>

                  <p class="Code">&nbsp;&nbsp;inline_pre_extension = C, S</p>

                  <p class="Code">
                    &nbsp;&nbsp;source_outputext = .cpp, .cxx,
                    .cc, .C
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;header_outputext = .h, .hpp,
                    .hxx, .hh
                  </p>

                  <p class="Code">&nbsp;&nbsp;inline_outputext = .inl, .i</p>

                  <p class="Code">
                    &nbsp;&nbsp;keyword idlflags =
                    commandflags
                  </p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">
                    &nbsp;&nbsp;optional(source_pre_extension)
                    {
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;commandflags(-GA) +=
                    A
                  </p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">
                    &nbsp;&nbsp;optional(template_outputext)
                    {
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
                    S_T.cpp, S_T.cxx, S_T.cc, S_T.C
                  </p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">
                    &nbsp;&nbsp;optional(header_pre_extension)
                    {
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
                    S_T
                  </p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">
                    &nbsp;&nbsp;optional(inline_pre_extension)
                    {
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;commandflags(!-Sc) +=
                    S_T
                  </p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">}</p>

                  <p class="Code">&nbsp;</p>
                </blockquote>

                <p class="Body">
                  For custom file types, there are a few
                  keywords that can be used within the custom file type component
                  lists: <em class="Code">command</em>, <em class=
              "Code">commandflags</em>, <em class="Code">dependent</em>,
                  <em class="Code">dependent_libs</em>, <em class="Code">gendir</em>,
                  <em class="Code">postcommand</em>, and <em class=
              "Code">recurse</em>.
                </p>

                <p class="Body">
                  The <em class="Code">recurse</em> keyword
                  works as described in <a href="MakeProjectCreator.html#82186"
              class="XRef">Assignment Keywords</a>.
                </p>

                <p class="Body">
                  The <em class="Code">command</em>, <em class=
              "Code">commandflags</em>, <em class="Code">dependent</em>,
                  <em class="Code">dependent_libs</em> and
                  <em class="Code">postcommand</em> keywords can be used to
                  augment or override the value defined in the <em class=
              "Code">Define_Custom</em> section.
                </p>

                <p class="Body">
                  The <em class="Code">gendir</em> keyword can
                  be used (only if <em class="Code">output_option</em> is set in
                  <em class="Code">Define_Custom</em> ) to specify the directory
                  in which the generated output will go. Here is an example:
                </p>

                <blockquote>

                  <p class="Code">MOC_Files {</p>

                  <p class="Code">&nbsp;&nbsp;commandflags += -nw</p>

                  <p class="Code">&nbsp;&nbsp;gendir = moc_generated</p>

                  <p class="Code">&nbsp;&nbsp;QtReactor.h</p>

                  <p class="Code">}</p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">Source_Files {</p>

                  <p class="Code">
                    &nbsp;&nbsp;moc_generated/QtReactor_moc.cpp
                  </p>

                  <p class="Code">}</p>


                </blockquote>

                <p class="Body">
                  In the above example, the <em class=
              "Code">-nw</em> option is added to <em class=
              "Code">commandflags</em> and the generated file (<em class=
              "Code">QtReactor_moc.cpp</em> ) is placed in the <em class=
              "Code">moc_generated</em> directory. If the <em class=
              "Code">MOC</em> custom definition did not have an <em class=
              "Code">output_option</em> setting, then options would need to
                  be added to <em class="Code">commandflags</em> or a <em class=
              "Code">postcommand</em> would need to be defined to ensure that
                  the output actually went into the <em class=
              "Code">moc_generated</em> directory.
                </p>


                <div>
                  <h6 class="Head6">Modify_Custom</h6>


                  <p class="Body">
                    An existing <em class=
                "Code">Define_Custom</em> section can be modified by using
                    <em class="Code">Modify_Custom</em>. The syntax of the body
                    is identical to that of a <em class=
                "Code">Define_Custom</em>. The example below shows a
                    modification to the TAO IDL defaults found in <em class=
                "Code">taoidldefaults.mpb</em> of the TAO+ACE distribution.
                    Everything provided by the <em class=
                "Code">Define_Custom(IDL)</em> remains unchanged except for
                    the values set within the <em class=
                "Code">Modify_Custom(IDL).</em>
                  </p>

                  <blockquote>

                    <p class="Code">project: taoidldefaults {</p>

                    <p class="Code">&nbsp;&nbsp;specific(!automake) {</p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;tao_idlflags += -Sc
                      -hs _s.h -si _s.i -ss _s.cpp -hc .h -ci .i -cs .cpp
                    </p>

                    <p class="Code">&nbsp;&nbsp;}</p>

                    <p class="Code">&nbsp;</p>

                    <p class="Code">
                      &nbsp;&nbsp;// This allows "make idl_stubs"
                      to work
                    </p>

                    <p class="Code">&nbsp;&nbsp;verbatim(gnuace, macros) {</p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_HDR_EXT
                      ?= .h
                    </p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_INL_EXT
                      ?= .i
                    </p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;IDL_CLIENT_SRC_EXT
                      ?= .cpp
                    </p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_HDR_EXT
                      ?= _s.h
                    </p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_INL_EXT
                      ?= _s.i
                    </p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;IDL_SERVER_SRC_EXT
                      ?= _s.cpp
                    </p>

                    <p class="Code">&nbsp;&nbsp;}</p>

                    <p class="Code">&nbsp;</p>

                    <p class="Code">&nbsp;&nbsp;Modify_Custom(IDL) {</p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;source_pre_extension = , _s
                    </p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;header_pre_extension = , _s
                    </p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;inline_pre_extension = , _s
                    </p>

                    <p class="Code">
                      &nbsp;&nbsp;&nbsp;&nbsp;inline_outputext
                      &nbsp;&nbsp;&nbsp;&nbsp;= .i
                    </p>

                    <p class="Code">&nbsp;&nbsp;}</p>

                    <p class="Code">}</p>
                    <blockquote>
                      </ul>
                    </div>

                <div>
                  <h6 class="Head6">Custom Post Command</h6>


                  <p class="BodyNoLead">
                    When defining a <em class=
                "Code">postcommand</em> as part of a <em class=
                "Code">Define_Custom</em>, a few pseudo template variables
                    are available to provide some flexibility. The following
                    table shows the pseudo template variables that can be
                    accessed only from the <em class="Code">postcommand</em>.
                    Please note that <em class="Code">&lt;%</em> and <em class=
                "Code">%&gt;</em> are part of the syntax.
                  </p>

                  <p style="list-style: none">
                    <h6 class="NumberedTableTitle">
                      Post Command Pseudo
                      Variables
                    </h6>

                    <table border="1" summary="Post Command Pseudo Variables">
                      <tr>
                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Variable</p>
                        </th>

                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Description</p>
                        </th>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%input%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The input file to the
                            command.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%input_basename%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The basename of the input file to
                            the command.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%input_dirname%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The directory name of the input
                            file to the command.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%input_noext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The input file to the command
                            with the extension stripped off.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%input_ext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This gives the file extension of
                            the input file (if there is one).
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%output%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file created by the
                            original command.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%output_basename%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The basename of the output file
                            to the command.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%output_dirname%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The directory name of the output
                            file to the command.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%output_noext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file created by the
                            original command with the extension stripped off.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%output_ext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            This gives the file extension of
                            the output file (if there is one).
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="2">
                          <p class="TblCode">
                            The output file can be referenced
                            as a generic output file, or it can be referenced as
                            a component file using one of the following
                            variables. If it does not match the specific type the
                            value will be empty.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%documentation_file%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file if it is a
                            documentation file.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%header_file%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file if it has a
                            header file extension.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%inline_file%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file if it has an
                            inline file extension.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%resource_file%&gt;</em> (<em class=
                        "TableCode">&lt;%resx_file%&gt;</em> for C# and
                            VB)
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file if it has a
                            resource file extension.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%source_file%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file if it has a
                            source file extension.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%template_file%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file if it is a
                            template file.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%documentation_file_noext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file without an
                            extension if it is a documentation file.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%header_file_noext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file without an
                            extension if it has a header file extension.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%inline_file_noext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file without an
                            extension if it has an inline file extension.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%resource_file_noext%&gt;</em>
                            (<em class="TableCode">&lt;%resx_file_noext%&gt;</em>
                            for C# and VB)
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file without an
                            extension if it has a resource file extension.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%source_file_noext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file without an
                            extension if it has a source file extension.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%template_file_noext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output file without an
                            extension if it is a template file.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="2">
                          <p class="TblCode">
                            The extensions of the input and
                            output files are also available as pseudo
                            variables.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%input_ext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The extension of the input file
                            (if it has one).
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%output_ext%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The extension of the output file
                            (if it has one).
                          </p>
                        </td>
                      </tr>
                    </table>
                  </p>



                  <p class="Body">
                    The following table describes the pseudo
                    template variables that can be used in the <em class=
                "Code">command</em>, <em class="Code">commandflags</em>,
                    <em class="Code">dependent</em>, <em class=
                "Code">output_option</em> and <em class=
                "Code">postcommand</em> settings.
                  </p>

                  <p style="list-style: none">
                    <h6 class="NumberedTableTitle">
                      <a name=
                  "Common_Pseudo_Variables"></a>Common Pseudo Variables
                    </h6>

                    <table border="1" summary="Common Pseudo Variables">
                      <tr>
                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Variable</p>
                        </th>

                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Description</p>
                        </th>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%and%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform and project
                            non-specific representation of a command conditional
                            and.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%cat%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific command
                            to print a file to the terminal.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%cmdsep%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A project and platform
                            non-specific command separator which always runs
                            right-hand side of the command. For example, in the
                            following pseudo command string, both the <em class=
                        "Code">&lt;%cat%&gt;</em> and <em class=
                        "Code">&lt;%mv%&gt;</em> commands would be run.
                            <em class="Code">
                              &lt;%cat%&gt; &lt;%source_file%&gt;
                              &lt;%gt%&gt; foo &lt;%cmdsep%&gt; &lt;%mv%&gt; foo
                              other_dir
                            </em>
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%cmp%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific command
                            to compare two files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%cp%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific command
                            to copy a file.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%crlf%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific line
                            ending.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%equote%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A project non-specific escaped
                            double quote.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%gendir%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output directory specified by
                            the <em class="Code">gendir</em> setting. This
                            variable is not available to <em class=
                        "Code">postbuild</em>, <em class=
                        "Code">postclean</em>, or<em class=
                        "Code">prebuild.</em>
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%gt%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform and project
                            non-specific representation of a greater than
                            sign.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%lt%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform and project
                            non-specific representation of a less than sign.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%mkdir%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific command
                            to make a directory.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%mv%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific command
                            to move a file.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%nul%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific null
                            device.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%pathsep%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific path
                            separator (; or :).
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%or%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform and project
                            non-specific representation of a command conditional
                            or.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%os%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">Returns either win32 or unix.</p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%prj_type%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The project type as supplied
                            by the -type command line option.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%quote%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A project non-specific
                            representation of a double quote.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%rm%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific command
                            to delete a file.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%rmdir%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific recursive
                            directory delete command.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%slash%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A platform non-specific directory
                            separator.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%temporary%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            A temporary file name. The
                            generated temporary file name contains no directory
                            portion and is the same for each use within the same
                            variable setting.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="2">
                          <p class="TblCode">
                            The following variables will
                            be set to the known extension for Windows based
                            project types and empty on non-Windows based
                            project types.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%bat%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The extension for batch
                            files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%cmd%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The extension for command
                            files.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="TblCode">
                            <em class=
                        "TableCode">&lt;%exe%&gt;</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The extension for executable
                            files.
                          </p>
                        </td>
                      </tr>
                    </table>
                  </p>

                </div>
              </div>
            </div>

            <div>
              <a name="TheFeatureFile" id="TheFeatureFile"></a>

              <h5 class="Head4">The Feature File</h5>


              <p class="BodyNoLead">
                The term feature, as used by MPC,
                describes different concepts or external software that a project
                may require in order to build properly. The feature file
                determines which features are enabled or disabled which has a
                direct effect on whether or not MPC generates a project.
              </p>

              <p class="Body">
                It supports the standard comment (<em class=
            "Code">//</em> ) and assignment of numbers to feature names.
                These feature names will correspond to values given to the
                <em class="Code">requires</em> and <em class="Code">avoids</em>
                keywords in mpc files.
              </p>

              <p class="Body">
                If a feature is not listed in the feature file
                or is listed with a boolean value of true (1), that feature is
                enabled. If a feature is listed and has a boolean value of false
                (0), that feature is disabled.
              </p>

              <p class="Body">
                If a feature name is listed in the <em class=
            "Code">requires</em> value for a particular project and that
                feature is enabled, that project will be generated. If the
                feature is not enabled, the project will not be generated.
              </p>

              <p class="Body">
                The opposite holds true for the <em class=
            "Code">avoids</em> keyword. If a feature name is listed in the
                <em class="Code">avoids</em> value for a project and the feature
                is disabled, that project will be generated. If the feature is
                enabled, the project will not be generated.
              </p>

              <p class="Body">
                The global feature file for MPC contains the
                following values.
              </p>

              <blockquote>

                <p class="Code">boost = 0</p>

                <p class="Code">bzip2 = 0</p>

                <p class="Code">java = 0</p>

                <p class="Code">mfc = 0</p>

                <p class="Code">python = 0</p>

                <p class="Code">qt = 0</p>

                <p class="Code">rpc = 0</p>

                <p class="Code">swig_java = 0</p>

                <p class="Code">swig_perl = 0</p>

                <p class="Code">swig_php = 0</p>

                <p class="Code">swig_python = 0</p>

                <p class="Code">swig_ruby = 0</p>

                <p class="Code">swig_tcl = 0</p>

                <p class="Code">uses_wchar = 0</p>

                <p class="Code">xalan = 0</p>

                <p class="Code">xerces = 0</p>

                <p class="Code">xerces2 = 0</p>

                <p class="Code">xerces3 = 0</p>

                <p class="Code">ziparchive = 0</p>

                <p class="Code">zlib = 0</p>

                <p class="Code">zzip = 0</p>


              </blockquote>

              <p class="Body">
                In the above contents, all of these features are
                disabled for each project generated. If these values do not suit
                your needs, then you must do one of the following:
              </p>

              <p class="BodyNoLead">
                <ul>
                  <li>
                    Create a project specific feature file in the <em class=
                "Code">config</em> directory (ex., <em class=
                "Code">make.features</em> for the <em class="Code">make</em>
                    project type) to set features for a particular project
                    type.
                  </li>

                  <li>
                    Create a <em class="Code">default.features</em> file in
                    the <em class="Code">config</em> directory that contains the
                    feature set you need. These will be applied to all project
                    types.
                  </li>

                  <li>
                    Create a feature file anywhere you like with the features
                    you want and use the <em class="Code">-feature_file</em>
                    option to specify the location.
                  </li>

                  <li>
                    Use the <em class="Code">-features</em> option to
                    dynamically modify the feature settings.
                  </li>
                </ul>
              </p>

              <p class="Body">
                Generated projects will have a combination of
                features specified in the <em class="Code">global.features</em>
                file as well as in your feature file. Therefore, if a feature is
                disabled in the global file and you want to enable it, you must
                explicitly enable it in your feature file.
              </p>

            </div>

            <div>
              <h5 class="Head4">Feature Projects</h5>


              <p class="Body">
                A feature project contains information as
                a project would, but can only be a base project and will only be
                added to a sub project if the features that it requires are
                enabled or the features that it avoids are disabled.
              </p>

              <p class="Body">
                A feature definition requires at least one
                feature name. A name by itself specifies that the feature must be
                enabled. A &rsquo;!&rsquo; in front of the feature name indicates
                that the feature must be disabled. There may be more than one
                comma separated feature listed between the parenthesis.
              </p>

              <p class="Body">
                The following example show how to declare a
                feature project.
              </p>

              <blockquote>

                <p class="Code">// ziparchive.mpb</p>

                <p class="Code">feature(ziparchive) {</p>

                <p class="Code">&nbsp;&nbsp;includes += $(ZIPARCHIVEROOT)</p>

                <p class="Code">
                  &nbsp;&nbsp;libpaths +=
                  $(ZIPARCHIVEROOT)/lib
                </p>

                <p class="Code">
                  &nbsp;&nbsp;libs &nbsp;&nbsp;&nbsp;&nbsp;+=
                  ziparch
                </p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>
              </blockquote>

              <p class="Body">
                With this example, any project that inherits
                from the <em class="Code">ziparchive</em> base feature project
                will contain the project information only if the <em class=
            "Code">ziparchive</em> feature is enabled.
              </p>

            </div>
          </div>

          <div>
            <h4 class="Head3">Defaults</h4>


            <p class="BodyNoLead">
              MPC has been designed to minimize the amount
              of maintenance that goes into keeping build tool files up-to-date
              with the project. If your source code is organized <em class=
          "Emphasis">properly</em>, the maintenance of your mpc files should
              be minimal.
            </p>

            <p class="Body">
              With the use of inheritance and proper code
              arrangement, an mpc file for a TAO related project may be as simple
              as:
              </li>

              <blockquote>

                <p class="Code">project: taoserver {</p>

                <p class="Code">}</p>


              </blockquote>

              <p class="Body">
                This project definition could be used to generate
                a project for a TAO server with multiple idl, header and source
                files.
              </p>

              <p class="Body">
                The idea of <em class="Emphasis">proper</em>
                source layout is basically summarized as <em class="Emphasis">
                  one
                  directory per binary target.
                </em> If only the files that pertain to
                a single target are located in the directory with the mpc file,
                then the MPC defaults will satisfy most project needs.
              </p>

              <p class="Body">
                Of course, it will not always be possible or
                desirable to organize your project code in this fashion, so all
                defaulting behavior can be overridden. The next sections describe
                the default behaviors of MPC and how to override them.
              </p>


              <div>
                <h5 class="Head4">Source Files</h5>

                <p class="BodyNoLead">
                  New source files are added and others are
                  removed quite often in a developing project. If the <em class=
            "Code">Source_Files</em> component is left out of an mpc file,
                  then MPC will assume that any file matching one of the <em class=
            "Emphasis">source</em> extensions is to be included in the
                  project. For most project types, the source extensions are:
                  <em class="Code">.cpp</em>, <em class="Code">.cxx</em>,
                  <em class="Code">.cc</em>, <em class="Code">.c</em> and
                  <em class="Code">.C</em>. Only the following extensions are
                  considered source extensions: <em class="Code">.cpp</em>,
                  <em class="Code">.cxx</em> and <em class="Code">.c</em> for the
                  <em class="Code">em3</em> and <em class="Code">vc6</em> project
                  types as eMbedded Visual C++ and Visual C++ 6.0 do not understand
                  files with the <em class="Code">.cc</em> or <em class=
            "Code">.C</em> extension.
                </p>

              </div>

              <div>
                <h5 class="Head4">Template Files</h5>


                <p class="BodyNoLead">
                  MPC assumes that any file matching one of
                  the <em class="Emphasis">template</em> extensions is to be
                  included in the project if the <em class=
            "Code">Template_Files</em> component is left out of an mpc file.
                  For most project types, the template extensions are: <em class=
            "Code">_T.cpp</em>, <em class="Code">_T.cxx</em>, <em class=
            "Code">_T.cc</em>, <em class="Code">_T.c</em>, and <em class=
            "Code">_T.C</em>. However, only the <em class="Code">_T.cpp</em>
                  and <em class="Code">_T.cxx</em> extensions are considered
                  template extensions for the <em class="Code">em3</em> and
                  <em class="Code">vc6</em> project types.
                </p>

                <p class="Body">
                  If the <em class="Code">Source_Files</em>
                  component is defaulted, and a file is explicitly listed in the
                  Template_Files section that happens to appear to MPC as a source
                  file (i.e., has a source file extension, but does not have
                  <em class="Code">_T</em> directly before it), MPC will
                  automatically exclude it from the <em class=
            "Code">Source_Files</em> component.
                </p>

              </div>

              <div>
                <h5 class="Head4">Inline Files</h5>

                <p class="BodyNoLead">
                  As with source files, the <em class=
            "Code">Inline_Files</em> component can be left out of an mpc file
                  to allow it to generate defaults. Files that match the <em class=
            "Code">.i</em> and <em class="Code">.inl</em> extensions are
                  considered inline files.
                </p>

                <p class="Body">
                  The <em class="Code">Inline_Files</em> component
                  has a special interaction with the <em class=
            "Code">Source_Files</em> component. If the <em class=
            "Code">Source_Files</em> component has files listed and the
                  <em class="Code">Inline_Files</em> component is omitted, then
                  each source file is <em class="Emphasis">matched</em> to an
                  inline file. If the matching inline file is found or would be
                  generated from a custom command, it is added to the <em class=
            "Code">Inline_Files</em> component list.
                </p>

              </div>

              <div>
                <h5 class="Head4">Header Files</h5>

                <p class="BodyNoLead">
                  As with source files, the <em class=
            "Code">Header_Files</em> component can be left out of an mpc file
                  to allow it to generate defaults. Files that match the <em class=
            "Code">.h</em>, <em class="Code">.hpp</em>, <em class=
            "Code">.hxx</em>, and <em class="Code">.hh</em> extensions are
                  considered header files.
                </p>

                <p class="Body">
                  The <em class="Code">Header_Files</em> component
                  has a special interaction with the <em class=
            "Code">Source_Files</em> component. If the <em class=
            "Code">Source_Files</em> component has files listed and the
                  <em class="Code">Header_Files</em> component is omitted, then
                  each source file is <em class="Emphasis">matched</em> to a header
                  file. If the matching header file is found or would be generated
                  from a custom command, then it is added to the <em class=
            "Code">Header_Files</em> component list.
                </p>

              </div>

              <div>
                <h5 class="Head4">Documentation Files</h5>

                <p class="BodyNoLead">
                  The <em class=
            "Code">Documentation_Files</em> component, if omitted, will
                  default to all files that end in the following: <em class=
            "Code">README</em>, <em class="Code">readme</em>, <em class=
            "Code">.doc</em>, <em class="Code">.html</em> and <em class=
            "Code">.txt</em>.
                </p>

              </div>

              <div>
                <h5 class="Head4">Resource Files</h5>


                <p class="BodyNoLead">
                  The <em class="Code">Resource_Files</em>
                  component, if omitted, will default to only the files that end in
                  <em class="Code">.rc</em> and are similar to the name of the
                  project. For example, if a directory contains three <em class=
            "Code">.rc</em> files and the project name is <em class=
            "Code">foo</em>, only the <em class="Code">.rc</em> files that
                  contain the word <em class="Code">foo</em> will automatically be
                  added to the <em class="Code">Resource_Files</em> component
                  list.
                </p>

              </div>

              <div>
                <h5 class="Head4">Custom Defined Files</h5>


                <p class="BodyNoLead">
                  The <em class="Code">
                    Custom Defined
                    Files
                  </em> components have a special interaction with the
                  <em class="Code">Source_Files</em> component. If the custom
                  command generates source files and has the <em class=
            "Code">automatic_out</em> setting set to 1, they will
                  automatically be added to the <em class="Code">Source_Files</em>
                  component list. If any of the files listed in the <em class=
            "Code">Source_Files</em> components list match any of the
                  generated source file names, then none of the generated source
                  file names will be automatically added to the <em class=
            "Code">Source_Files</em> components list.
                </p>

              </div>

              <div>
                <a name="ExampleMPCFile" id="ExampleMPCFile"></a>

                <h5 class="Head4">Example MPC File</h5>

                <p class="BodyNoLead">
                  The example below uses the directory
                  contents of <em class=
            "Code">$TAO_ROOT/orbsvcs/performance-tests/RTEvent/lib</em> to
                  illustrate the simplicity of mpc files:
                </p>

                <blockquote>

                  <p class="Code">
                    Auto_Disconnect.cpp Loopback_Supplier.h
                    RTEC_Initializer.cpp
                  </p>

                  <p class="Code">
                    Auto_Disconnect.h Low_Priority_Setup.cpp
                    RTEC_Initializer.h
                  </p>

                  <p class="Code">
                    Auto_Disconnect.inl Low_Priority_Setup.h
                    rtec_perf_export.h
                  </p>

                  <p class="Code">
                    Auto_Functor.cpp Low_Priority_Setup.inl
                    RTEC_Perf.mpc
                  </p>

                  <p class="Code">Auto_Functor.h Makefile RTPOA_Setup.cpp</p>

                  <p class="Code">
                    Auto_Functor.inl ORB_Holder.cpp
                    RTPOA_Setup.h
                  </p>

                  <p class="Code">
                    Client_Group.cpp ORB_Holder.h
                    RTPOA_Setup.inl
                  </p>

                  <p class="Code">
                    Client_Group.h ORB_Holder.inl
                    RTServer_Setup.cpp
                  </p>

                  <p class="Code">
                    Client_Group.inl ORB_Shutdown.cpp
                    RTServer_Setup.h
                  </p>

                  <p class="Code">
                    Client_Options.cpp ORB_Shutdown.h
                    RTServer_Setup.inl
                  </p>

                  <p class="Code">
                    Client_Options.h ORB_Shutdown.inl
                    Send_Task.cpp
                  </p>

                  <p class="Code">
                    Client_Pair.cpp ORB_Task_Activator.cpp
                    Send_Task.h
                  </p>

                  <p class="Code">
                    Client_Pair.h ORB_Task_Activator.h
                    Send_Task_Stopper.cpp
                  </p>

                  <p class="Code">
                    Client_Pair.inl ORB_Task_Activator.inl
                    Send_Task_Stopper.h
                  </p>

                  <p class="Code">
                    Consumer.cpp ORB_Task.cpp
                    Send_Task_Stopper.inl
                  </p>

                  <p class="Code">Consumer.h ORB_Task.h Servant_var.cpp</p>

                  <p class="Code">Control.cpp ORB_Task.inl Servant_var.h</p>

                  <p class="Code">Control.h Peer_Base.cpp Servant_var.inl</p>

                  <p class="Code">EC_Destroyer.cpp Peer_Base.h Shutdown.cpp</p>

                  <p class="Code">
                    EC_Destroyer.h PriorityBand_Setup.cpp
                    Shutdown.h
                  </p>

                  <p class="Code">
                    EC_Destroyer.inl PriorityBand_Setup.h
                    Shutdown.inl
                  </p>

                  <p class="Code">
                    Federated_Test.idl PriorityBand_Setup.inl
                    Supplier.cpp
                  </p>

                  <p class="Code">
                    Implicit_Deactivator.cpp RIR_Narrow.cpp
                    Supplier.h
                  </p>

                  <p class="Code">
                    Implicit_Deactivator.h RIR_Narrow.h
                    SyncScope_Setup.cpp
                  </p>

                  <p class="Code">
                    Implicit_Deactivator.inl RT_Class.cpp
                    SyncScope_Setup.h
                  </p>

                  <p class="Code">
                    Loopback_Consumer.cpp RT_Class.h
                    SyncScope_Setup.inl
                  </p>

                  <p class="Code">
                    Loopback_Consumer.h RT_Class.inl
                    TAO_RTEC_Perf.dsp
                  </p>

                  <p class="Code">
                    Loopback.cpp RTClient_Setup.cpp
                    TAO_RTEC_Perf.dsw
                  </p>

                  <p class="Code">
                    Loopback.h RTClient_Setup.h
                    Task_Activator.cpp
                  </p>

                  <p class="Code">
                    Loopback_Pair.cpp RTClient_Setup.inl
                    Task_Activator.h
                  </p>

                  <p class="Code">
                    Loopback_Pair.h RTCORBA_Setup.cpp
                    Task_Activator.inl
                  </p>

                  <p class="Code">Loopback_Pair.inl RTCORBA_Setup.h</p>

                  <p class="Code">Loopback_Supplier.cpp RTCORBA_Setup.inl</p>

                </blockquote>

                <p class="Body">
                  The following mpc file (<em class=
            "Code">RTEC_Perf.mpc</em> ) shows the simple and small number of
                  lines required to generate usable build tool project files.
                </p>

                <blockquote>

                  <p class="Code">
                    project(RTEC_Perf): strategies, rtcorbaevent,
                    minimum_corba {
                  </p>

                  <p class="Code">&nbsp;&nbsp;sharedname = TAO_RTEC_Perf</p>

                  <p class="Code">
                    &nbsp;&nbsp;idlflags +=
                    -Wb,export_macro=TAO_RTEC_Perf_Export \
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;-Wb,export_include=rtec_perf_export.h
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;dllflags +=
                    TAO_RTEC_PERF_BUILD_DLL
                  </p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">&nbsp;&nbsp;Template_Files {</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Auto_Disconnect.cpp</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Auto_Functor.cpp</p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;Low_Priority_Setup.cpp
                  </p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;RIR_Narrow.cpp</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Servant_var.cpp</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Shutdown.cpp</p>

                  <p class="Code">&nbsp;&nbsp;&nbsp;&nbsp;Task_Activator.cpp</p>

                  <p class="Code">&nbsp;&nbsp;}</p>

                  <p class="Code">}</p>


                </blockquote>

                <p class="Body">
                  A line-by-line explanation of the example mpc
                  file is listed below.
                </p>

                <blockquote>

                  <p class="Code">
                    project(RTEC_Perf): strategies, rtcorbaevent,
                    minimum_corba {
                  </p>


                </blockquote>

                <p class="Body">
                  The first line declares a project named
                  <em class="Code">RTEC_Perf</em> that inherits from the base
                  projects listed after the colon.
                </p>

                <blockquote>

                  <p class="Code">sharedname = TAO_RTEC_Perf</p>


                </blockquote>

                <p class="Body">
                  Line two determines that the project is a
                  library and the library name is <em class=
            "Code">TAO_RTEC_Perf</em>.
                </p>

                <blockquote>

                  <p class="Code">
                    idlflags +=
                    -Wb,export_macro=TAO_RTEC_Perf_Export \
                  </p>

                  <p class="Code">-Wb,export_include=rtec_perf_export.h</p>


                </blockquote>

                <p class="Body">
                  Lines three and four add to the flags passed to
                  the IDL compiler when processing the idl files.
                </p>

                <blockquote>

                  <p class="Code">dllflags += TAO_RTEC_PERF_BUILD_DLL</p>


                </blockquote>

                <p class="Body">
                  Line five adds <em class=
            "Code">TAO_RTEC_PERF_BUILD_DLL</em> to the <em class=
            "Code">dllflags</em>, which defines a macro that is used by the
                  <em class="Code">rtec_perf_export.h</em> header file.
                </p>

                <blockquote>

                  <p class="Code">Template_Files {</p>

                  <p class="Code">&nbsp;&nbsp;Auto_Disconnect.cpp</p>

                  <p class="Code">&nbsp;&nbsp;Auto_Functor.cpp</p>

                  <p class="Code">&nbsp;&nbsp;Low_Priority_Setup.cpp</p>

                  <p class="Code">&nbsp;&nbsp;RIR_Narrow.cpp</p>

                  <p class="Code">&nbsp;&nbsp;Servant_var.cpp</p>

                  <p class="Code">&nbsp;&nbsp;Shutdown.cpp</p>

                  <p class="Code">&nbsp;&nbsp;Task_Activator.cpp</p>

                  <p class="Code">}</p>


                </blockquote>

                <p class="Body">
                  Lines 7 through 15 name the listed cpp files as
                  part of the <em class="Code">Template_Files</em>.  <br/><strong>Note:</strong>
                  This usage of Template_Files refers to files containing C++ template declaration and
                  definition source code and should not be confused with MPC <a href ="#MPD_Syntax">template files</a>
                  which are used to define the structure of generated project files.
                </p>

                <p class="Body">
                  You may have noticed that there isn&rsquo;t much
                  to the file above. With the default behaviors that are built into
                  MPC, there does not need to be. We rely on the defaults to
                  determine the values of <em class="Code">IDL_Files</em>,
                  <em class="Code">Source_Files</em>, <em class=
            "Code">Inline_Files</em> , and <em class=
            "Code">Header_Files</em>. Since the template files in this example C++ project
                  do not follow the naming convention assumed by the MPC built-in defaults
                  (_T.cpp, _T.cxx, _T.cc, _T.C),
                  we must explicitly list them. We also
                  rely on inheritance to get many of the TAO-related options.
                </p>


              </div>
            </div>
        </div>

      <div>
        <h3 class="Head2">Adding a New Type</h3>
        <hr>

          <p class="Body">
            If MPC does not support a particular build tool, you
            may want to consider adding a new project type. For instance, support
            could be added to MPC for Boost Jam, Xcode and many others. To do so
            will require knowledge of the MPC input files, as well as Object
            Oriented Perl.
          </p>


          <div>
            <h4 class="Head3">Input File Syntax</h4>

            <p class="BodyNoLead">
              This section describes the syntax of the
              files that are used during project generation.
            </p>


            <div>
              <h5 class="Head4">
                <a name="MPD_Syntax"></a>Template Files
                (mpd)
              </h5>

              <p class ="Body">
                Template files make up the bulk of what
                MPC puts into each generated project file. They provide the plain
                text and the layout of the data provided by the mpc files, using
                various template directives.
              </p>

              <p class="Body">
                Template directives are declared using a
                <em class="Code">&lt;% %&gt;</em> construct. This construct is
                used to create if statements, for loops and to access variables.
                One thing to note is that any text, including white space, that
                is not enclosed within <em class="Code">&lt;% %&gt;</em> is left
                untouched and is passed directly into the generated project
                file.
              </p>

              <p class="Body">
                An <em class="Code">if</em> statement can appear
                on a single line or it can span multiple lines. For example, the
                following line:
              </p>

              <blockquote>

                <p class="Code">
                  &lt;%if(exename)%&gt;BIN =
                  &lt;%exename%&gt;&lt;%else%&gt;LIB =
                  &lt;%sharedname%&gt;&lt;%endif%&gt;
                </p>


              </blockquote>

              <p class="Body">
                is equivalent to:</li>

                <blockquote>

                  <p class="Code">&lt;%if(exename)%&gt;</p>

                  <p class="Code">BIN = &lt;%exename%&gt;</p>

                  <p class="Code">&lt;%else%&gt;</p>

                  <p class="Code">LIB = &lt;%sharedname%&gt;</p>

                  <p class="Code">&lt;%endif%&gt;</p>


                </blockquote>

                <p class="Body">
                  <a name="foreach_syntax"></a> A <em class=
            "Code">foreach</em> statement can also appear on a single line or
                  can span multiple lines. As described below in the keywords
                  section, the <em class="Code">foreach</em> statement evaluates
                  the variable in a space-separated list context.
                </p>

                <p class="Body">
                  There are a couple of ways to write a <em class=
            "Code">foreach</em> loop. The first and preferred way is to name
                  the loop variable and then list each variable to be
                  evaluated.
                </p>

                <blockquote>

                  <p class="Code">
                    FILES=&lt;%foreach(fvar, idl_files source_files
                    header_files)%&gt; &lt;%fvar%&gt;&lt;%endfor%&gt;
                  </p>


                </blockquote>

                <p class="Body">
                  The second way is to let the <em class=
            "Code">foreach</em> statement determine the loop variable. With
                  this style, each value can be accessed via the first variable
                  name passed to the <em class="Code">foreach</em> with the
                  trailing &rsquo;<em class="Code">s</em> &rsquo; removed.
                </p>

                <blockquote>

                  <p class="Code">
                    FILES=&lt;%foreach(idl_files source_files
                    header_files)%&gt; &lt;%idl_file%&gt;&lt;%endfor%&gt;
                  </p>


                </blockquote>

                <p class="Body">
                  Note that the <em class=
            "Code">&lt;%idl_file%&gt;</em> variable will contain each
                  individual value of the <em class="Code">idl_files</em>,
                  <em class="Code">source_files</em> and <em class=
            "Code">header_files</em> list. If the variable in the <em class=
            "Code">foreach</em> does not end in &rsquo;<em class=
            "Code">s</em> &rsquo;, the variable of the same name within the
                  <em class="Code">foreach</em> will contain each individual value,
                  e.g.,
                </p>

                <blockquote>

                  <p class="Code">
                    &lt;%foreach(filelist)%&gt;
                    &lt;%filelist%&gt;&lt;%endfor%&gt;
                  </p>


                </blockquote>

                <p class="Body">
                  The following table lists keywords that can
                  appear in template files.
                </p>

                <p class ="Body">
                  <a name="38037"></a>

                  <h6 class="NumberedTableTitle">Template File Keywords</h6>

                  <table border="1" summary="Template File Keywords">
                    <tr>
                      <th rowspan="1" colspan="1">
                        <p class="Tbl-Heading">Keyword</p>
                      </th>

                      <th rowspan="1" colspan="1">
                        <p class="Tbl-Heading">Description</p>
                      </th>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">basename</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Evaluates the variable name and
                          removes the directory portion from that value.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">basenoextension</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This is similar to <em class=
                    "Code">basename</em> except that the extension is also
                          removed from the variable name value.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">comment</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          The value passed to comment is
                          ignored and can be any set of characters, except a new
                          line or a closing parenthesis.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">compares</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function returns true if the
                          variable value (first parameter) is equal to the string
                          value (second parameter).
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">contains</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function returns true if the
                          variable value (first parameter) contains the regular
                          expression (second parameter).
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">deref</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Dereference the variable passed as
                          a parameter, treating its value as another variable
                          name and returning that variable's value.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">dirname</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Evaluates the variable name and
                          removes the <em class="Code">basename</em> from that
                          value.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">duplicate_index</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function returns a number based
                          on the number of times a file with the same name (but
                          different directory) is seen within a project. The
                          function returns false upon the first occurrence of a
                          file.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">else</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Used with the <em class=
                    "Code">if</em> statement. An <em class="Code">else</em>
                          block will be evaluated if the statement does not
                          evaluate to true.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">endfor</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Used with <em class=
                    "Code">foreach</em>. This ends <em class=
                    "Code">foreach</em> block.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">endif</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Used with the <em class=
                    "Code">if</em> statement. This ends an <em class=
                    "Code">if</em> or <em class="Code">if/else</em>
                          block.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">ends_with</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function returns true if the
                          variable value (first parameter) ends with the regular
                          expression (second parameter).
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">eval</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This is similar to eval in perl. The
                          template variable passed to this function will be
                          evaluated within the context of the current template.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">extensions</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Returns a list of extensions based on
                          the component name parameter (e.g., source_files,
                          header_files, etc.)
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">flag_overrides</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This is directly related to
                          overriding the project-wide settings in an mpc file. It
                          takes two variable names that are comma separated. The
                          first corresponds to a file name and the second is any
                          variable name.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">foreach</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          The given variable names are
                          evaluated in a list context which is space separated.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">forfirst</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Used with <em class=
                    "Code">foreach</em>. The literal value passed to
                          <em class="Code">forfirst</em> will be placed on the
                          first iteration of <em class="Code">foreach</em>.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">forlast</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Used with <em class=
                    "Code">foreach</em>. The literal value passed to
                          <em class="Code">forlast</em> will be placed on the last
                          iteration of <em class="Code">foreach</em>.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">fornotfirst</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Used with <em class=
                    "Code">foreach</em>. The literal value passed to
                          <em class="Code">fornotfirst</em> will be placed on each
                          iteration of <em class="Code">foreach</em> except for the
                          first.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">fornotlast</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Used with <em class=
                    "Code">foreach</em>. The literal value passed to
                          <em class="Code">fornotlast</em> will be placed on each
                          iteration of <em class="Code">foreach</em> except for the
                          last.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">full_path</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Returns full path of the value of the
                          variable name passed a the parameter.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">has_extension</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Returns true is the variable value
                          has a file extension.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">if</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Used to determine if a variable is
                          defined. The not operator (<em class="Code">!</em> ) can
                          be used to invert the if check. This construct will only
                          check for values defined within an mpc or mpt file.
                          Default values (even those implemented by the project
                          creators) are not considered in the <em class=
                    "Code">if</em> statement.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">keyname_used</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function is used to associate a
                          key with a variable value. If the key has been associated
                          with a variable value more than once, either through
                          physical repetition of the key in the template or through
                          evaluation of a foreach context, the count of association
                          will be appended to the output.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">lc</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Return the given variable value in
                          all lower case characters.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">marker</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This is directly related to the
                          <em class="Code">verbatim</em> keyword from the mpc
                          syntax. This can be used to designate markers within a
                          template. Ex. <em class=
                    "Code">&lt;%marker(local)%&gt;</em>.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">multiple</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function returns true if the
                          array parameter contains multiple values.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">noextension</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Evaluates the variable name value as
                          a file name and removes the extension from that value
                          including the period.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">normalize</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Convert spaces, dashes, slashes,
                          dollar signs, parenthesis and dots in the given variable
                          value to underscores.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">remove_from</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function will remove a file in a
                          component list. It requires three parameters. The first
                          parameter is a component name (e.g., Source_Files), the
                          second parameter is a regular expression pattern and
                          the third parameter is a project or template variable
                          name. The fourth and optional parameter allows you to
                          alter the project or template variable value by
                          removing the end matching portion.  If the value of
                          the project or template variable (i.e., parameter
                          three) after being modified by parameter four and
                          having the regular expression pattern (i.e.,
                          parameter two) appended to it matches any value
                          within the component list (named by parameter one), it
                          will be removed from that component list and passed
                          back.
                          any
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">reverse</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function reverses the order of
                          the array parameter values.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">scope</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This is used to set the scope of
                          execution of a function that will operate on the template
                          output. A scope is begun by passing "enter" as the first
                          parameter and a function name as the second parameter.
                          Currently, the only function name supported is "escape".
                          The third parameter specifies a string on which the
                          function will operate. Any template text that matches the
                          string parameter while within this scope will be
                          transformed by the function parameter. A scope is then
                          ended by passing "leave".
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">set</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function is used to set or
                          create a template variable.  This function takes two
                          parameters; the first is the template variable name
                          and the second is the variable value.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">sort</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function sorts the array
                          parameter values.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">starts_with</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function returns true if the
                          variable value (first parameter) starts with the regular
                          expression (second parameter).
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">transdir</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Replaces values within the directory
                          portion of a variable value with something that can be
                          used as a relative path. The current working directory is
                          removed and ".." is replaced with "dotdot".
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">translate_vars</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          The first parameter to this function
                          is the name of a variable.  The second, optional,
                          parameter is the operating system for which the
                          project is being generated (e.g., linux, solaris,
                          win32, etc.)  It replaces $(...) found within the
                          value of the variable with the equivalent environment
                          variable reference based on the operating system.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">uc</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Return the given variable value in
                          all upper case characters.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">ucw</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Return the given variable value with
                          the first letter of each word in upper case. Words are
                          separated by spaces or underscores.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">uniq</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This function returns the unique set
                          of the array parameter values.
                        </p>
                      </td>
                    </tr>
                  </table>
                </p>

                <p class="Body">
                  The following table lists special names that can
                  be used as variables in some template files. The variables listed
                  in the <a href=
            "MakeProjectCreator.html#Common_Pseudo_Variables" class=
            "XRef">Common_Pseudo_Variables</a> table can be used as well
                  (except for <em class="Code">&lt;%temporary%&gt;</em>).
                </p>

                <p style="list-style: none">
                  <h6 class="NumberedTableTitle">
                    Special Values used in Template
                    Files
                  </h6>

                  <table border="1" summary=
              "Special Values used in Template Files">
                    <tr>
                      <th rowspan="1" colspan="1">
                        <p class="Tbl-Heading">Value</p>
                      </th>

                      <th rowspan="1" colspan="1">
                        <p class="Tbl-Heading">Description</p>
                      </th>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">am_version</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Implemented by the Automake project
                          creator module, converts the <em class=
                    "Code">version</em> setting into a suitable value for
                          automake.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">ciao</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Implemented by the GNUACE project
                          creator module, specifies that the project uses CIAO.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">compilers</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Implemented by the Make project
                          creator module, provides the compiler name based on the
                          current project language.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">cppdir</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This value is implemented by the
                          BMake project creator module. It returns a semicolon
                          separated list of directories taken from each value in
                          the <em class="Code">Source_Files</em> list.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">custom_types</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Contains a list of the custom build
                          types. See <a href=
                    "MakeProjectCreator.html#Custom_Types" class=
                    "XRef">Custom Types</a> for more details.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">cwd</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          The full current working
                          directory.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">forcount</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This only has a value within the
                          context of a <em class="Code">foreach</em> and provides a
                          1 based count, by default, of the index of the elements
                          in <em class="Code">foreach</em>.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">guid</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This value is implemented by the VC7
                          and WIX project creator modules. It returns a <em class=
                    "Code">guid</em> value based on the project that is
                          usable within VC7, VC71, VC8, VC9, VC10, VC11, VC12, and WIX project
                          files.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">language</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This value is implemented by the VC7
                          and Make project creator modules. It returns the current
                          language setting for the project.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">make_file_name</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This value is implemented by the VC6
                          and EM3 project creator modules. It returns the project
                          name with the make file extension that corresponds to the
                          particular project type.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">project_file</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This variable contains the name of
                          the output file for the current project being
                          generated.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">project_name</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This variable contains the name of
                          the current project being generated.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">rcdir</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This value is implemented by the
                          BMake project creator module. It returns a semicolon
                          separated list of directories taken from each value in
                          the <em class="Code">Resource_Files</em> list.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">source_directory</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This value is implemented by the WIX
                          project creator module. It converts the variable portion
                          of the binary output directory (either <em class=
                    "Code">exeout</em>, <em class="Code">dllout</em>, or
                          <em class="Code">libout</em>) to a suitable value for
                          WIX.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">tao</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          Implemented by the GNUACE project
                          creator module, specifies that the project uses TAO.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class=
                    "TableCode">vcversion</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This value is implemented by the
                          VC7ProjectCreator. It returns the version number of the
                          type of project being generated. 7.00 is return for vc7,
                          7.10 is return for vc71 and 8.00 is returned for vc8,
                          9.00 is returned for vc9, 10.00 is returned for vc10,
                          11.00 is returned for vc11, 12.0 is returned for vc12,
                          14.0 is returned for vc14, 14.1 is returned for vs2017, 14.2 is returned for vs2019, 14.3 is returned for vs2022.
                        </p>
                      </td>
                    </tr>

                    <tr>
                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          <em class="TableCode">vpath</em>
                        </p>
                      </td>

                      <td rowspan="1" colspan="1">
                        <p class="Tbl-Body">
                          This value is implemented by the
                          GNUACEProjectCreator. It returns a value, based on the
                          location of the source files, that specifies the
                          <em class="Code">VPATH</em> setting for GNU Make.
                        </p>
                      </td>
                    </tr>
                  </table>
                </p>



                <p class="Body">
                  <h6 class="Head5">
                    <a name="Document_Template_Script"></a>
                    Template Variable Documentation
                  </h6>
                </p>

                <p class="Body">
                  Template variables used within the MPC templates
                  are numerous and vary from template to template; there are far
                  too many to include in this document. However, you can generate
                  an HTML document containing all of the template variables used
                  within a template using the <em class=
            "Code">document_template.pl</em> script found in the <em class=
            "Code">devtools</em> directory under the MPC root directory. You
                  may find that some templates and individual template variables
                  are well documented and, unfortunately, some are not.
                </p>

                <p class="Body">
                  The script will generate documentation for an
                  individual template file. The usage is as follows:
                </p>

                <blockquote>

                  <p class="Code">document_template.pl v1.3</p>

                  <p class="Code">
                    Usage: document_template.pl &lt;template&gt;
                    [&lt;html output&gt; [language]]
                  </p>

                  <p class="Code">&nbsp;</p>

                  <p class="Code">
                    html output - This defaults to the name of the
                    template file with the .mpd
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extension replaced with
                    .html.
                  </p>

                  <p class="Code">
                    language &nbsp;&nbsp;&nbsp;- This defaults to
                    the language for which the template is designed.
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It can be any of the valid
                    language settings for MPC:
                  </p>

                  <p class="Code">
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
                    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cplusplus csharp java
                    vb
                  </p>
                </blockquote>


                <div>
                  <a name="Custom_Types"></a>

                  <h6 class="Head5">Custom Types</h6>

                  <p class="BodyNoLead">
                    To support multiple custom build types,
                    a special keyword was introduced. The <em class=
              "Code">custom_types</em> keyword is used to access the list of
                    custom types defined by the user. In a <em class=
              "Code">foreach</em> context, each custom type can be accessed
                    through the <em class="Code">custom_type</em> keyword.
                  </p>

                  <p class="Body">
                    A variety of information is available from
                    each <em class="Code">custom_type</em> through the <em class=
              "Code">-&gt;</em> operator. The input files, input extensions,
                    command, command output option, command flags, and output file
                    directory are all accessible through the field names that
                    correspond to the particular type.
                  </p>

                  <p class="Body">
                    The input files associated with the custom
                    type are accessed through <em class=
              "Code">custom_type-&gt;input_files</em>. Each input file has a
                    set of output files associated with it which can be accessed in
                    a <em class="Code">foreach</em> context through c<em class=
              "Code">ustom_type-&gt;input_file-&gt;output_files</em>. The
                    custom type fields are those listed in the <a href=
              "MakeProjectCreator.html#32899" class="XRef">
                      Define_Custom
                      Keywords
                    </a> table as well as those listed in the following
                    table.
                  </p>

                  <p style="list-style: none">
                    <h6 class="NumberedTableTitle">Custom Type Fields</h6>

                    <table border="1" summary="Custom Type Fields">
                      <tr>
                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Value</p>
                        </th>

                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Description</p>
                        </th>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">dependencies</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The files on which the processing
                            of the custom input file depends.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">gendir</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The output directory associated
                            with a particular input file. This field has no meaning
                            when accessed directly through the <em class=
                      "Code">custom_type</em>. It should always be used
                            within the context of a <em class=
                      "Code">flag_overrides</em> (see <a href=
                      "MakeProjectCreator.html#38037" class="XRef">
                              Template
                              File Keywords
                            </a>).
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">input_files</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The input files associated with the
                            custom type.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">inputexts</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The input file extensions
                            associated with the custom type.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">non_source_output_files</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            All output files generated from the
                            custom input file that are not considered source code
                            files by MPC.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">output_files</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            All output files generated from the
                            custom input file.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">source_output_files</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            All output files generated from the
                            custom input file that are considered source code files
                            by MPC.
                          </p>
                        </td>
                      </tr>
                    </table>
                  </p>

                  <p class="Body">
                    The example below, which creates generic
                    makefile rules for building custom input files, shows basic use
                    of the custom type and the various fields that can be accessed.
                    The main limitation with the <em class="Code">custom_types</em>
                    keyword, as can be seen below, is that the <em class=
              "Code">foreach</em> variable cannot be named as stated <a href=
              "MakeProjectCreator.html#foreach_syntax" class=
              "XRef">previously</a>.
                    </lpi>

                    <blockquote>

                      <p class="Code">&lt;%if(custom_types)%&gt;</p>

                      <p class="Code">&lt;%foreach(custom_types)%&gt;</p>

                      <p class="Code">
                        &lt;%foreach(custom_type-&gt;input_files)%&gt;
                      </p>

                      <p class="Code">
                        &lt;%foreach(custom_type-&gt;input_file-&gt;output_files)%&gt;
                      </p>

                      <p class="Code">
                        &lt;%custom_type-&gt;input_file-&gt;output_file%&gt;:
                        &lt;%custom_type-&gt;input_file%&gt;
                      </p>

                      <p class="Code">
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%custom_type-&gt;command%&gt;
                        &lt;%custom_type-&gt;commandflags%&gt; $@
                      </p>

                      <p class="Code">&nbsp;</p>

                      <p class="Code">&lt;%endfor%&gt;</p>

                      <p class="Code">&lt;%endfor%&gt;</p>

                      <p class="Code">&lt;%endfor%&gt;</p>

                      <p class="Code">&lt;%endif%&gt;</p>


                    </blockquote>

                    <p class="Body">
                      Certain project types don't support the same
                      input file used by multiple custom types (current examples of
                      this are vc10, vc11, vc12, vc14, vs*, cdt6, and cdt7). To accommodate these types, MPC
                      has a capability called "combined custom".  With this capability
                      enabled in the specific ProjectCreator, MPC will "fold together"
                      the multiple custom steps so that the target tool (Visual Studio
                      or Eclipse CDT) sees it as a single custom step that happens to
                      run two or more commands.  When "combined custom" is enabled,
                      the template needs to be written for it by checking if
                      <em class="Code">custom_type-&gt;input_file-&gt;commands</em> is
                      non-empty.  If it isn't empty, the values in it can be iterated
                      over with a <em class="Code">&lt;%foreach%&gt;</em>.  During that
                      iteration, the following values can be obtained by the template.
                      Each one would appear in the template preceded by
                      <em class="Code">custom_type-&gt;input_file-&gt;</em>
                    </p>

                    <p style="list-style: none">
                      <h6 class="NumberedTableTitle">
                        Custom Type Fields for Combined
                        Custom
                      </h6>
                      <table border="1"
                             summary="Custom Type Fields for Combined Custom">
                        <tr>
                          <th rowspan="1" colspan="1">
                            <p class="Tbl-Heading">Value</p>
                          </th>

                          <th rowspan="1" colspan="1">
                            <p class="Tbl-Heading">Description</p>
                          </th>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class=
                      "TableCode">command</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              The effective command, taking into
                              account the <em class="TableCode">flag_overrides</em>.
                            </p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class=
                      "TableCode">command-&gt;outopt</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              The <em class=
                      "TableCode">output_option</em> for this particular
                              command, taking into account the
                              <em class="TableCode">flag_overrides</em>.
                            </p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class=
                      "TableCode">command-&gt;outfile</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              The first output file for this
                              particular command (for use with
                              <em class="TableCode">outopt</em>).
                            </p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class=
                      "TableCode">command-&gt;flags</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              The <em class=
                      "TableCode">commandflags</em> for this particular
                              command, taking into account the
                              <em class="TableCode">flag_overrides</em>.
                            </p>
                          </td>
                        </tr>

                        <tr>
                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              <em class=
                      "TableCode">command-&gt;gdir</em>
                            </p>
                          </td>

                          <td rowspan="1" colspan="1">
                            <p class="Tbl-Body">
                              The <em class=
                      "TableCode">gendir</em> for this particular
                              command.
                            </p>
                          </td>
                        </tr>

                      </table>
                    </p>


                  </div>

                <div>
                  <h6 class="Head5">Grouped Files</h6>

                  <p class="Body">
                    File grouping is part of the syntax of
                    mpc files. If a set of files are grouped within the mpc file,
                    they can be accessed as a group within the mpd file.
                  </p>

                  <p class="Body">
                    Files (such as <em class=
              "Code">Source_Files</em>, <em class="Code">Header_Files</em> )
                    can be grouped together as shown <a href=
              "MakeProjectCreator.html#MPC%20grouping%20example" class=
              "XRef">here</a>. Within the mpd file, the different components
                    can be accessed by prepending <em class="Code">grouped_</em> to
                    the component (<em class="Code">grouped_source_files</em>,
                    <em class="Code">grouped_header_files</em>, etc.)
                  </p>

                  <p class="Body">
                    <h6 class="NumberedTableTitle">Grouped Files Field Names</h6>

                    <table border="1" summary="Grouped Files Field Names">
                      <tr>
                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Field Name</p>
                        </th>

                        <th rowspan="1" colspan="1">
                          <p class="Tbl-Heading">Description</p>
                        </th>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">files</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The input files associated with the
                            group.
                          </p>
                        </td>
                      </tr>

                      <tr>
                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            <em class=
                      "TableCode">component_name</em>
                          </p>
                        </td>

                        <td rowspan="1" colspan="1">
                          <p class="Tbl-Body">
                            The name of the set of multiple
                            groups of files.
                          </p>
                        </td>
                      </tr>
                    </table>
                  </p>

                  <p class="Body">
                    The example below, which creates make macros
                    for each file group, shows basic use of grouping and the fields
                    that can be accessed. The main limitation with file grouping,
                    as can be seen below, is that the <em class="Code">foreach</em>
                    variable cannot be named as stated <a href=
              "MakeProjectCreator.html#foreach_syntax" class=
              "XRef">previously</a>. The following example involves source
                    files, but any of the <a href="MakeProjectCreator.html#16907"
              class="XRef">components</a> listed in the mpc and mpb section
                    can be used.
                    </li>

                    <blockquote>

                      <p class="Code">&lt;%if(grouped_source_files)%&gt;</p>

                      <p class="Code">
                        &lt;%comment(Get back each set of grouped
                        files)%&gt;
                      </p>

                      <p class="Code">&lt;%foreach(grouped_source_files)%&gt;</p>

                      <p class="Code">
                        &lt;%comment(This will provide the name of
                        the group)%&gt;
                      </p>

                      <p class="Code">&lt;%grouped_source_file%&gt; = \</p>

                      <p class="Code">
                        &lt;%comment(Get all the source files in a
                        single group)%&gt;
                      </p>

                      <p class="Code">
                        &lt;%foreach(grouped_source_file-&gt;files)%&gt;
                      </p>

                      <p class="Code">
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%grouped_source_file-&gt;file)%&gt;&lt;%fornotlast("
                        \\")%&gt;
                      </p>

                      <p class="Code">&lt;%endfor%&gt;</p>

                      <p class="Code">&lt;%endfor%&gt;</p>

                      <p class="Code">&nbsp;</p>

                      <p class="Code">
                        ifndef
                        &lt;%grouped_source_files-&gt;component_name%&gt;
                      </p>

                      <p class="Code">
                        &lt;%grouped_source_files-&gt;component_name%&gt; = \
                      </p>

                      <p class="Code">&lt;%foreach(grouped_source_files)%&gt;</p>

                      <p class="Code">
                        &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;%grouped_source_file%&gt;&lt;%fornotlast("
                        \\")%&gt;
                      </p>

                      <p class="Code">&lt;%endfor%&gt;</p>

                      <p class="Code">endif</p>

                      <p class="Code">&lt;%endif%&gt;</p>

                      <p class="Code">&nbsp;</p>
                    </blockquote>

                  </div>
              </div>

            <div>
              <h5 class="Head4">Template Input Files (mpt)</h5>

              <p class="BodyNoLead">
                Template input files provide build tool
                specific information that is common to all projects, such as
                compiler switches, intermediate directories, compiler macros,
                etc. Each project type can provide template input files for
                dynamic libraries, static libraries, dynamic executables and
                static executables. However, none of these are actually required
                by MPC.
              </p>

              <p class="Body">
                The template input files are more free-form than
                the other MPC file types. It is similar to the mpc syntax except
                that there is no project definition and there is only one
                keyword. The keyword, <em class="Code">conditional_include</em>,
                is used to include other mpt files if they can be found in the
                MPC include search path. If the name listed in double quotes
                after <em class="Code">conditional_include</em> is not found, it
                is ignored and no warning is produced. The <em class=
            "Code">mpt</em> extension is automatically added to the name
                provided.
              </p>

              <p class="Body">
                The template input files contain variable
                assignments and collections of variable assignments. A variable
                assignment is of the form:
              </p>

              <blockquote>

                <p class="Code">variable_name = value1 "value 2"</p>

                <p class="Code">variable_name += another_value</p>

                <p class="Code">&nbsp;</p>
              </blockquote>

              <p class="Body">
                This variable can then be used within the
                corresponding mpd file.
              </p>

              <p class="Body">
                Variable assignments can be grouped together and
                named within the mpt file and used as scoped variables within the
                mpd file. The following example shows the use of collections of
                variable assignments.
              </p>

              <blockquote>

                <p class="Code">// mpt file</p>

                <p class="Code">configurations = Release Debug</p>

                <p class="Code">common_defines = WIN32 _CONSOLE</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">Release {</p>

                <p class="Code">
                  &nbsp;&nbsp;compile_flags = /W3 /GX /O2 /MD
                  /GR
                </p>

                <p class="Code">&nbsp;&nbsp;defines = NDEBUG</p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">Debug {</p>

                <p class="Code">
                  &nbsp;&nbsp;compile_flags = /W3 /Gm /GX /Zi /Od
                  /MDd /GR /Gy
                </p>

                <p class="Code">&nbsp;&nbsp;defines = _DEBUG</p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">conditional_include "vcfullmacros"</p>

                <p class="Code">&nbsp;</p>
              </blockquote>

              <p class="Body">
                Below is the portion of the mpd file that would
                use the information provided in the mpt file above.
              </p>

              <blockquote>

                <p class="Code">&lt;%foreach(configurations)%&gt;</p>

                <p class="Code">Name = &lt;%configuration%&gt;</p>

                <p class="Code">
                  &lt;%compile_flags%&gt;&lt;%foreach(defines
                  common_defines)%&gt; /D &lt;%define%&gt;=1&lt;%endfor%&gt;
                </p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&lt;%endfor%&gt;</p>


              </blockquote>

              <p class="Body">
                The following output is generated from the above
                example:
              </p>

              <blockquote>

                <p class="Code">Name = Release</p>

                <p class="Code">
                  /W3 /GX /O2 /MD /GR /D NDEBUG=1 /D WIN32=1 /D
                  _CONSOLE=1
                </p>

                <p class="Code">&nbsp;</p>

                <p class="Code">Name = Debug</p>

                <p class="Code">
                  /W3 /Gm /GX /Zi /Od /MDd /GR /Gy /D _DEBUG=1 /D
                  WIN32=1 /D _CONSOLE=1
                </p>


              </blockquote>

              <p class="Body">
                If a <em class="Code">foreach</em> variable
                value corresponds to a variable group name, that variable group
                is available within the scope of that <em class=
            "Code">foreach</em>.
              </p>

              <p class="Body">
                &nbsp;</li>

              </div>
          </div>

          <div>
            <h4 class="Head3">A Simple Example</h4>

            <p class="BodyNoLead">
              We will discuss what it would take to add
              support for a fictional build tool throughout this section. The
              <a href="MakeProjectCreator.html#Figure_1-2" class=
          "XRef">Generating projects with mpc.pl diagram</a> shows the
              relationship between the template and project creator discussed
              below.
            </p>


            <div>
              <h5 class="Head4">Template</h5>

              <p class="BodyNoLead">
                The best thing to do is to start with the
                template. The template is the most important piece when adding a
                new project type. It basically tells MPC how to lay out all of
                the information it gathers while processing an mpc file. The
                template file will have a mixture of plain text and the mpd
                syntax described in the <a href=
            "MakeProjectCreator.html#MPD_Syntax" class="XRef">
                  Template
                  Files
                </a> section. Here is our sample <em class=
            "Code">fictional.mpd</em>.
              </p>

              <blockquote>
                <p class="Code">
                  //=======================================================================
                </p>

                <p class="Code">// This project has been generated by MPC.</p>

                <p class="Code">
                  // CAUTION! Hand edit only if you know what you
                  are doing!
                </p>

                <p class="Code">
                  //=======================================================================
                </p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 1 - PROJECT OPTIONS</p>

                <p class="Code">ctags:*</p>

                <p class="Code">debugSwitches:-nw</p>

                <p class="Code">//end-proj-opts</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 2 - MAKEFILE</p>

                <p class="Code">Makefile.&lt;%project_name%&gt;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 3 - OPTIONS</p>

                <p class="Code">//end-options</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 4 - TARGET FILE</p>

                <p class="Code">&lt;%if(exename)%&gt;</p>

                <p class="Code">&lt;%exename%&gt;</p>

                <p class="Code">&lt;%else%&gt;</p>

                <p class="Code">&lt;%if(sharedname)%&gt;</p>

                <p class="Code">&lt;%sharedname%&gt;</p>

                <p class="Code">&lt;%else%&gt;</p>

                <p class="Code">&lt;%if(staticname)%&gt;</p>

                <p class="Code">&lt;%staticname%&gt;</p>

                <p class="Code">&lt;%endif%&gt;</p>

                <p class="Code">&lt;%endif%&gt;</p>

                <p class="Code">&lt;%endif%&gt;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 5 - SOURCE FILES</p>

                <p class="Code">&lt;%foreach(source_files)%&gt;</p>

                <p class="Code">&lt;%source_file%&gt;</p>

                <p class="Code">&lt;%endfor%&gt;</p>

                <p class="Code">//end-srcfiles</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 6 - INCLUDE DIRECTORIES</p>

                <p class="Code">&lt;%foreach(includes)%&gt;</p>

                <p class="Code">&lt;%include%&gt;</p>

                <p class="Code">&lt;%endfor%&gt;</p>

                <p class="Code">//end-include-dirs</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 7 - LIBRARY DIRECTORIES</p>

                <p class="Code">&lt;%foreach(libpaths)%&gt;</p>

                <p class="Code">&lt;%libpath%&gt;</p>

                <p class="Code">&lt;%endfor%&gt;</p>

                <p class="Code">//end-library-dirs</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 8 - DEFINITIONS</p>

                <p class="Code">&lt;%foreach(macros defines)%&gt;</p>

                <p class="Code">-D&lt;%macro%&gt;</p>

                <p class="Code">&lt;%endfor%&gt;</p>

                <p class="Code">&lt;%if(pch_header)%&gt;</p>

                <p class="Code">&lt;%foreach(pch_defines)%&gt;</p>

                <p class="Code">-D&lt;%pch_define%&gt;</p>

                <p class="Code">&lt;%endfor%&gt;</p>

                <p class="Code">&lt;%endif%&gt;</p>

                <p class="Code">//end-defs</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 9 - C FLAGS</p>

                <p class="Code">&lt;%cflags("-g")%&gt;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 10 - LIBRARY FLAGS</p>

                <p class="Code">&lt;%libflags%&gt;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 11 - SRC DIRECTORY</p>

                <p class="Code">.</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 12 - OBJ DIRECTORY</p>

                <p class="Code">&lt;%objdir(".")%&gt;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 13 - BIN DIRECTORY</p>

                <p class="Code">
                  &lt;%if(exeout)%&gt;&lt;%exeout%&gt;&lt;%else%&gt;.&lt;%endif%&gt;
                </p>

                <p class="Code">&nbsp;</p>

                <p class="Code">
                  // User targets section. Following lines will
                  be
                </p>

                <p class="Code">
                  // inserted into Makefile right after the
                  generated cleanall target.
                </p>

                <p class="Code">
                  // The Project File editor does not edit these
                  lines - edit the .vpj
                </p>

                <p class="Code">
                  // directly. You should know what you are
                  doing.
                </p>

                <p class="Code">// Section 14 - USER TARGETS</p>

                <p class="Code">&lt;%marker(top)%&gt;</p>

                <p class="Code">&lt;%marker(macros)%&gt;</p>

                <p class="Code">&lt;%marker(local)%&gt;</p>

                <p class="Code">&lt;%marker(bottom)%&gt;</p>

                <p class="Code">//end-user-targets</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">// Section 15 - LIBRARY FILES</p>

                <p class="Code">&lt;%foreach(libs lit_libs pure_libs)%&gt;</p>

                <p class="Code">&lt;%lib%&gt;</p>

                <p class="Code">&lt;%endfor%&gt;</p>

                <p class="Code">//end-library-files</p>


              </blockquote>

              <p class="Body">
                Note that output is generated differently
                depending upon whether <em class="Code">&lt;%exename%&gt;</em>,
                <em class="Code">&lt;%sharedname%&gt;</em> or <em class=
            "Code">&lt;%staticname%&gt;</em> is defined due to the if
                statements that were used with relation these variable names.
                Also, certain portions of the project file are only generated if
                particular variables are set.
              </p>

            </div>

            <div>
              <h5 class="Head4">Project Creator</h5>

              <p class="BodyNoLead">
                Next, you would write the <em class=
            "Code">FictionalProjectCreator.pm</em>. It may be best to start
                with a copy of the <em class="Code">MakeProjectCreator.pm</em>
                and edit it. Change the package name to <em class=
            "Code">FictionalProjectCreator</em> and have it inherit from
                <em class="Code">MakeProjectBase</em> and <em class=
            "Code">ProjectCreator</em>. Then, override the methods that are
                needed for this particular type.
              </p>

              <blockquote>
                <p class="Code">package FictionalProjectCreator;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code"># Description : A Fictional Project Creator</p>

                <p class="Code"># Author : Chad Elliott</p>

                <p class="Code"># Create Date : 10/01/2004</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code">&nbsp;</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code"># Pragmas</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code">&nbsp;</p>

                <p class="Code">use strict;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">use MakeProjectBase;</p>

                <p class="Code">use ProjectCreator;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">use vars qw(@ISA);</p>

                <p class="Code">@ISA = qw(MakeProjectBase ProjectCreator);</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code"># Subroutine Section</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code">&nbsp;</p>

                <p class="Code">sub convert_slashes {</p>

                <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>

                <p class="Code">&nbsp;&nbsp;return 0;</p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">sub project_file_extension {</p>

                <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>

                <p class="Code">&nbsp;&nbsp;return '.fic';</p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">sub get_dll_exe_template_input_file {</p>

                <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>

                <p class="Code">&nbsp;&nbsp;return 'fictionalexe';</p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">sub get_dll_template_input_file {</p>

                <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>

                <p class="Code">&nbsp;&nbsp;return 'fictionaldll';</p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">sub get_template {</p>

                <p class="Code">&nbsp;&nbsp;#my $self = shift;</p>

                <p class="Code">&nbsp;&nbsp;return 'fictional';</p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">1;</p>

                <p class="Code">&nbsp;</p>
              </blockquote>

              <p class="Body">
                In our example, we inherit from the
                MakeProjectBase which provides some methods that are common to
                all &ldquo;make&rdquo; based project creators.
              </p>

              <p class="Body">
                We override the <em class=
            "Code">convert_slashes</em> method to return 0. A zero return
                value tells MPC not to convert slashes to back slashes
                (converting slashes is useful for Windows related build
                tools).
              </p>

              <p class="Body">
                We then override the <em class=
            "Code">project_file_extension</em> method to return the project
                file extension which is used by a method defined in the
                MakeProjectBase module.
              </p>

              <p class="Body">
                Next, we override the <em class=
            "Code">get_dll_exe_template_input_file</em> and <em class=
            "Code">get_dll_template_input_file</em> methods. Those methods
                return the specific template input file names for a dynamic
                executable and dynamic library, respectively.
              </p>

              <p class="Body">
                Lastly, we override the <em class=
            "Code">get_template</em> method to return the template file name
                for our new project type. In our case, the method returns
                <em class="Code">fictional</em> which corresponds to the name of
                the template file we created earlier.
              </p>

              <p class="Body">
                There are many other methods that can be
                overridden to change the way MPC generates output. For a complete
                list, see the &ldquo;Virtual Methods To Be Overridden&rdquo;
                section of the <em class="Code">Creator.pm</em> and <em class=
            "Code">ProjectCreator.pm</em>.
              </p>

            </div>

            <div>
              <h5 class="Head4">Workspace Creator</h5>

              <p class="BodyNoLead">
                The last part that you would need to write
                is the <em class="Code">FictionalWorkspaceCreator.pm</em>. This
                module is usually more code-intensive than its Project Creator
                counterpart.
              </p>

              <blockquote>
                <p class="Code">package FictionalWorkspaceCreator;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code">
                  # Description : A Fictional Workspace
                  Creator
                </p>

                <p class="Code"># Author : Chad Elliott</p>

                <p class="Code"># Create Date : 10/01/2004</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code">&nbsp;</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code"># Pragmas</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code">&nbsp;</p>

                <p class="Code">use strict;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">use FictionalProjectCreator;</p>

                <p class="Code">use WorkspaceCreator;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">use vars qw(@ISA);</p>

                <p class="Code">@ISA = qw(WorkspaceCreator);</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code"># Subroutine Section</p>

                <p class="Code">
                  #
                  ************************************************************
                </p>

                <p class="Code">&nbsp;</p>

                <p class="Code">sub workspace_file_name {</p>

                <p class="Code">&nbsp;&nbsp;my $self = shift;</p>

                <p class="Code">
                  &nbsp;&nbsp;return
                  $self-&gt;get_modified_workspace_name($self-&gt;get_workspace_name(),
                  '.fws');
                </p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">sub pre_workspace {</p>

                <p class="Code">&nbsp;&nbsp;my($self, $fh) = @_;</p>

                <p class="Code">&nbsp;&nbsp;my $crlf = $self-&gt;crlf();</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">
                  &nbsp;&nbsp;print $fh '&lt;?xml version="1.0"
                  encoding="UTF-8"?&gt;', $crlf,
                </p>

                <p class="Code">
                  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'&lt;!--
                  MPC Command --&gt;', $crlf,
                </p>

                <p class="Code">
                  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"&lt;!--
                  $0 @ARGV --&gt;", $crlf;
                </p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">sub write_comps {</p>

                <p class="Code">&nbsp;&nbsp;my($self, $fh) = @_;</p>

                <p class="Code">
                  &nbsp;&nbsp;my $projects =
                  $self-&gt;get_projects();
                </p>

                <p class="Code">
                  &nbsp;&nbsp;my @list =
                  $self-&gt;sort_dependencies($projects);
                </p>

                <p class="Code">&nbsp;&nbsp;my $crlf = $self-&gt;crlf();</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">
                  &nbsp;&nbsp;print $fh '&lt;projects&gt;',
                  $crlf;
                </p>

                <p class="Code">&nbsp;&nbsp;foreach my $project (@list) {</p>

                <p class="Code">
                  &nbsp;&nbsp;&nbsp;&nbsp;print $fh " &lt;project
                  path=\"$project\"/&gt;$crlf";
                </p>

                <p class="Code">&nbsp;&nbsp;}</p>

                <p class="Code">
                  &nbsp;&nbsp;print $fh
                  "&lt;/projects&gt;$crlf";
                </p>

                <p class="Code">}</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">1;</p>

                <p class="Code">&nbsp;</p>

                <p class="Code">&nbsp;</p>
              </blockquote>

              <p class="Body">
                The first method we override from
                WorkspaceCreator.pm is the <em class=
            "Code">workspace_file_name</em> method. It is used to determine
                the output file for the generated workspace.
              </p>

              <p class="Body">
                Second, we override the <em class=
            "Code">pre_workspace</em> method, which we use to print out the
                generic unchanging section of our generated workspace.
              </p>

              <p class="Body">
                Lastly, we override the <em class=
            "Code">write_comps</em> method. This method is where the bulk of
                the work is done in our workspace creator. A workspace creator
                has many sets of data available. A reference to the list of
                project file names can be obtained through the <em class=
            "Code">get_projects</em> method; project-specific information can
                be obtained through the <em class="Code">get_project_info</em>
                method which returns an array reference where each array element
                is an array containing the project name, project dependencies and
                a project guid (if applicable).
              </p>

            </div>
          </div>
        </div>
    </div>
  </body>
</html>
